@node-projects/web-component-designer 0.0.118 → 0.0.120
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/elements/helper/contextMenu/ContextMenuHelper.js +7 -2
- package/dist/elements/services/htmlWriterService/HtmlWriterService.js +10 -6
- package/dist/elements/widgets/designerView/designerCanvas.js +19 -2
- package/dist/elements/widgets/designerView/extensions/PositionExtension.d.ts +4 -0
- package/dist/elements/widgets/designerView/extensions/PositionExtension.js +26 -27
- package/dist/elements/widgets/designerView/extensions/PositionExtensionProvider.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/PositionExtensionProvider.js +4 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/RotateLeftAndRightContextMenu.js +1 -1
- package/dist/elements/widgets/designerView/extensions/contextMenu/SelectAllChildrenContextMenu.js +1 -1
- package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.js +1 -1
- package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.js +2 -1
- package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/ZoomTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbarButton.js +1 -1
- package/package.json +1 -1
|
@@ -133,12 +133,17 @@ export class ContextMenuHelper {
|
|
|
133
133
|
let ul = document.createElement('ul');
|
|
134
134
|
ul.className = 'context-menu__items';
|
|
135
135
|
nav.appendChild(ul);
|
|
136
|
+
let lastWasSeperator = false;
|
|
136
137
|
for (let i of items) {
|
|
137
138
|
if (i.title == '-') {
|
|
138
|
-
|
|
139
|
-
|
|
139
|
+
if (!lastWasSeperator) {
|
|
140
|
+
let hr = document.createElement('hr');
|
|
141
|
+
ul.appendChild(hr);
|
|
142
|
+
lastWasSeperator = true;
|
|
143
|
+
}
|
|
140
144
|
}
|
|
141
145
|
else {
|
|
146
|
+
lastWasSeperator = false;
|
|
142
147
|
let li = document.createElement('li');
|
|
143
148
|
li.className = 'context-menu__item';
|
|
144
149
|
let div = document.createElement('div');
|
|
@@ -6,12 +6,14 @@ export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
|
6
6
|
_conditionalyWriteIndent(indentedTextWriter, designItem) {
|
|
7
7
|
if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
|
|
8
8
|
(designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling)) ||
|
|
9
|
-
(designItem.element.previousElementSibling == null && !isInline(designItem.element.parentElement) && (designItem.element.previousSibling == null || isEmptyTextNode(designItem.element.previousSibling)))
|
|
9
|
+
(designItem.element.previousElementSibling == null && !isInline(designItem.element.parentElement) && (designItem.element.previousSibling == null || isEmptyTextNode(designItem.element.previousSibling))) ||
|
|
10
|
+
(designItem.element instanceof SVGElement))
|
|
10
11
|
indentedTextWriter.writeIndent();
|
|
11
12
|
}
|
|
12
13
|
_conditionalyWriteNewline(indentedTextWriter, designItem) {
|
|
13
14
|
if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
|
|
14
|
-
(designItem.element.nextElementSibling instanceof HTMLElement && !isInline(designItem.element.nextElementSibling))
|
|
15
|
+
(designItem.element.nextElementSibling instanceof HTMLElement && !isInline(designItem.element.nextElementSibling)) ||
|
|
16
|
+
(designItem.element instanceof SVGElement))
|
|
15
17
|
indentedTextWriter.writeNewline();
|
|
16
18
|
}
|
|
17
19
|
write(indentedTextWriter, designItems, rootContainerKeepInline, options, designItemsAssignmentList) {
|
|
@@ -48,7 +50,7 @@ export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
|
48
50
|
this.writeTextNode(indentedTextWriter, designItem, false);
|
|
49
51
|
}
|
|
50
52
|
else {
|
|
51
|
-
if (designItem.element instanceof HTMLElement && !isInline(designItem.element)) {
|
|
53
|
+
if (designItem.element instanceof HTMLElement && !isInline(designItem.element) || (designItem.element instanceof SVGElement)) {
|
|
52
54
|
indentedTextWriter.writeNewline();
|
|
53
55
|
indentedTextWriter.levelRaise();
|
|
54
56
|
}
|
|
@@ -56,9 +58,10 @@ export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
|
56
58
|
this.internalWrite(indentedTextWriter, c, options, designItemsAssignmentList);
|
|
57
59
|
let childSingleTextNode = c.childCount === 1 && c.firstChild.nodeType === NodeType.TextNode;
|
|
58
60
|
if (childSingleTextNode)
|
|
59
|
-
indentedTextWriter.
|
|
61
|
+
if (!indentedTextWriter.isLastCharNewline())
|
|
62
|
+
indentedTextWriter.writeNewline();
|
|
60
63
|
}
|
|
61
|
-
if (designItem.element instanceof HTMLElement && !isInline(designItem.element)) {
|
|
64
|
+
if (designItem.element instanceof HTMLElement && !isInline(designItem.element) || (designItem.element instanceof SVGElement)) {
|
|
62
65
|
indentedTextWriter.levelShrink();
|
|
63
66
|
if (!indentedTextWriter.isLastCharNewline())
|
|
64
67
|
indentedTextWriter.writeNewline();
|
|
@@ -73,7 +76,8 @@ export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
|
73
76
|
if (!DomConverter.IsSelfClosingElement(designItem.name))
|
|
74
77
|
indentedTextWriter.write('</' + designItem.name + '>');
|
|
75
78
|
//if (!contentSingleTextNode)
|
|
76
|
-
|
|
79
|
+
if (!indentedTextWriter.isLastCharNewline())
|
|
80
|
+
this._conditionalyWriteNewline(indentedTextWriter, designItem);
|
|
77
81
|
}
|
|
78
82
|
if (designItemsAssignmentList) {
|
|
79
83
|
designItemsAssignmentList.set(designItem, { start: start, length: indentedTextWriter.position - start - 1 });
|
|
@@ -319,9 +319,26 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
319
319
|
async handlePasteCommand() {
|
|
320
320
|
const designItems = await this.serviceContainer.copyPasteService.getPasteItems(this.serviceContainer, this.instanceServiceContainer);
|
|
321
321
|
let grp = this.rootDesignItem.openGroup("Insert");
|
|
322
|
+
let pasteContainer = this.rootDesignItem;
|
|
323
|
+
let pCon = this.instanceServiceContainer.selectionService.primarySelection;
|
|
324
|
+
while (pCon != null) {
|
|
325
|
+
const containerStyle = getComputedStyle(pCon.element);
|
|
326
|
+
let newContainerService;
|
|
327
|
+
newContainerService = this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(pCon, containerStyle));
|
|
328
|
+
if (newContainerService) {
|
|
329
|
+
if (newContainerService.canEnter(pCon, designItems)) {
|
|
330
|
+
pasteContainer = pCon;
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
pCon = pCon.parent;
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
322
339
|
if (designItems) {
|
|
323
340
|
for (let di of designItems) {
|
|
324
|
-
this.instanceServiceContainer.undoService.execute(new InsertAction(
|
|
341
|
+
this.instanceServiceContainer.undoService.execute(new InsertAction(pasteContainer, pasteContainer.childCount, di));
|
|
325
342
|
}
|
|
326
343
|
const intializationService = this.serviceContainer.intializationService;
|
|
327
344
|
if (intializationService) {
|
|
@@ -406,7 +423,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
406
423
|
this.instanceServiceContainer.undoService.clear();
|
|
407
424
|
this.overlayLayer.removeAllOverlays();
|
|
408
425
|
DomHelper.removeAllChildnodes(this.overlayLayer);
|
|
409
|
-
for (let i of this.rootDesignItem.children())
|
|
426
|
+
for (let i of [...this.rootDesignItem.children()])
|
|
410
427
|
this.rootDesignItem._removeChildInternal(i);
|
|
411
428
|
this.addDesignItems(designItems);
|
|
412
429
|
this.instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'parsed' });
|
|
@@ -7,6 +7,10 @@ export declare class PositionExtension extends AbstractExtension {
|
|
|
7
7
|
private _line2;
|
|
8
8
|
private _line3;
|
|
9
9
|
private _line4;
|
|
10
|
+
private _rectX;
|
|
11
|
+
private _textX;
|
|
12
|
+
private _rectY;
|
|
13
|
+
private _textY;
|
|
10
14
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
11
15
|
extend(): void;
|
|
12
16
|
refresh(): void;
|
|
@@ -4,6 +4,10 @@ export class PositionExtension extends AbstractExtension {
|
|
|
4
4
|
_line2;
|
|
5
5
|
_line3;
|
|
6
6
|
_line4;
|
|
7
|
+
_rectX;
|
|
8
|
+
_textX;
|
|
9
|
+
_rectY;
|
|
10
|
+
_textY;
|
|
7
11
|
constructor(extensionManager, designerView, extendedItem) {
|
|
8
12
|
super(extensionManager, designerView, extendedItem);
|
|
9
13
|
}
|
|
@@ -11,33 +15,28 @@ export class PositionExtension extends AbstractExtension {
|
|
|
11
15
|
this.refresh();
|
|
12
16
|
}
|
|
13
17
|
refresh() {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
this._line1 = this._drawLine((xOffset / this.designerCanvas.scaleFactor - left - tx), (yOffset + itemRect.height / 2) / this.designerCanvas.scaleFactor, xOffset / this.designerCanvas.scaleFactor, (yOffset + itemRect.height / 2) / this.designerCanvas.scaleFactor, 'svg-position', this._line1);
|
|
38
|
-
this._line2 = this._drawLine((xOffset + itemRect.width / 2) / this.designerCanvas.scaleFactor, (yOffset / this.designerCanvas.scaleFactor) - top - ty, (xOffset + itemRect.width / 2) / this.designerCanvas.scaleFactor, yOffset / this.designerCanvas.scaleFactor, 'svg-position', this._line2);
|
|
39
|
-
this._line3 = this._drawLine((xOffset + itemRect.width) / this.designerCanvas.scaleFactor, (yOffset + itemRect.height / 2) / this.designerCanvas.scaleFactor, (xOffset + itemRect.width + right + -1 * tx) / this.designerCanvas.scaleFactor, (yOffset + itemRect.height / 2) / this.designerCanvas.scaleFactor, 'svg-position', this._line3);
|
|
40
|
-
this._line4 = this._drawLine((xOffset + itemRect.width / 2) / this.designerCanvas.scaleFactor, (yOffset + itemRect.height) / this.designerCanvas.scaleFactor, (xOffset + itemRect.width / 2) / this.designerCanvas.scaleFactor, (yOffset + itemRect.height + bottom + -1 * ty) / this.designerCanvas.scaleFactor, 'svg-position', this._line4);
|
|
18
|
+
const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
19
|
+
const itemParentRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element.parentElement);
|
|
20
|
+
this._line1 = this._drawLine(itemParentRect.x, itemRect.y + itemRect.height / 2, itemRect.x, itemRect.y + itemRect.height / 2, 'svg-position', this._line1);
|
|
21
|
+
this._line2 = this._drawLine(itemParentRect.x + itemParentRect.width, itemRect.y + itemRect.height / 2, itemRect.x + itemRect.width, itemRect.y + itemRect.height / 2, 'svg-position', this._line2);
|
|
22
|
+
this._line3 = this._drawLine(itemRect.x + itemRect.width / 2, itemParentRect.y, itemRect.x + itemRect.width / 2, itemRect.y, 'svg-position', this._line3);
|
|
23
|
+
this._line4 = this._drawLine(itemRect.x + itemRect.width / 2, itemParentRect.y + itemParentRect.height, itemRect.x + itemRect.width / 2, itemRect.y + itemRect.height, 'svg-position', this._line4);
|
|
24
|
+
this._line1.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
|
|
25
|
+
this._line2.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
|
|
26
|
+
this._line3.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
|
|
27
|
+
this._line4.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
|
|
28
|
+
this._line1.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
|
|
29
|
+
this._line2.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
|
|
30
|
+
this._line3.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
|
|
31
|
+
this._line4.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
|
|
32
|
+
let x = Math.round(itemRect.x - itemParentRect.x);
|
|
33
|
+
let y = Math.round(itemRect.y - itemParentRect.y);
|
|
34
|
+
this._rectX = this._drawRect(itemParentRect.x + x / 2 - 10, itemRect.y + itemRect.height / 2 - 8, 20, 16, 'svg-position-text-rect', this._rectX);
|
|
35
|
+
this._textX = this._drawText('' + x, itemParentRect.x + x / 2 - 9, itemRect.y + itemRect.height / 2 + 4, null, this._textX);
|
|
36
|
+
this._textX.style.fontSize = '12px';
|
|
37
|
+
this._rectY = this._drawRect(itemRect.x + itemRect.width / 2 - 10, itemParentRect.y + y / 2 - 8, 20, 16, 'svg-position-text-rect', this._rectY);
|
|
38
|
+
this._textY = this._drawText('' + y, itemRect.x + itemRect.width / 2 - 10, itemParentRect.y + y / 2 + 4, null, this._textY);
|
|
39
|
+
this._textY.style.fontSize = '12px';
|
|
41
40
|
}
|
|
42
41
|
dispose() {
|
|
43
42
|
this._removeAllOverlays();
|
|
@@ -6,4 +6,5 @@ import { IExtensionManager } from "./IExtensionManger";
|
|
|
6
6
|
export declare class PositionExtensionProvider implements IDesignerExtensionProvider {
|
|
7
7
|
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
8
|
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
+
readonly style: CSSStyleSheet;
|
|
9
10
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PositionExtension } from "./PositionExtension";
|
|
2
|
+
import { css } from "@node-projects/base-custom-webcomponent";
|
|
2
3
|
export class PositionExtensionProvider {
|
|
3
4
|
shouldExtend(extensionManager, designerView, designItem) {
|
|
4
5
|
const cs = getComputedStyle(designItem.element);
|
|
@@ -9,4 +10,7 @@ export class PositionExtensionProvider {
|
|
|
9
10
|
getExtension(extensionManager, designerView, designItem) {
|
|
10
11
|
return new PositionExtension(extensionManager, designerView, designItem);
|
|
11
12
|
}
|
|
13
|
+
style = css `
|
|
14
|
+
.svg-position-text-rect { fill: white; }
|
|
15
|
+
`;
|
|
12
16
|
}
|
package/dist/elements/widgets/designerView/extensions/contextMenu/RotateLeftAndRightContextMenu.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CommandType } from "../../../../../commandHandling/CommandType";
|
|
2
2
|
export class RotateLeftAndRight {
|
|
3
3
|
shouldProvideContextmenu(event, designerView, designItem, initiator) {
|
|
4
|
-
return
|
|
4
|
+
return !designItem.isRootItem;
|
|
5
5
|
}
|
|
6
6
|
provideContextMenuItems(event, designerView, designItem) {
|
|
7
7
|
return [
|
package/dist/elements/widgets/designerView/extensions/contextMenu/SelectAllChildrenContextMenu.js
CHANGED
|
@@ -5,7 +5,7 @@ export class SelectAllChildrenContextMenu {
|
|
|
5
5
|
}
|
|
6
6
|
provideContextMenuItems(event, designerCanvas, designItem) {
|
|
7
7
|
return [{
|
|
8
|
-
title: '
|
|
8
|
+
title: 'select all Children', action: () => {
|
|
9
9
|
designerCanvas.instanceServiceContainer.selectionService.setSelectedElements(Array.from(designItem.children()).filter(x => x.nodeType == NodeType.Element));
|
|
10
10
|
}
|
|
11
11
|
}];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CommandType } from "../../../../../commandHandling/CommandType";
|
|
2
2
|
export class ZMoveContextMenu {
|
|
3
3
|
shouldProvideContextmenu(event, designerView, designItem, initiator) {
|
|
4
|
-
return
|
|
4
|
+
return !designItem.isRootItem;
|
|
5
5
|
}
|
|
6
6
|
provideContextMenuItems(event, designerView, designItem) {
|
|
7
7
|
return [
|
|
@@ -13,6 +13,8 @@ export class MagicWandSelectorTool {
|
|
|
13
13
|
designerCanvas.captureActiveTool(this);
|
|
14
14
|
this._path = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
15
15
|
this._path.setAttribute('class', 'svg-selector');
|
|
16
|
+
this._path.style.strokeWidth = '' + (1 / designerCanvas.scaleFactor);
|
|
17
|
+
this._path.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
|
|
16
18
|
this._pathD = "M" + currentPoint.x + " " + currentPoint.y;
|
|
17
19
|
this._path.setAttribute("D", this._pathD);
|
|
18
20
|
designerCanvas.overlayLayer.addOverlay(this._path, OverlayLayer.Foregorund);
|
|
@@ -31,7 +31,8 @@ export class PointerTool {
|
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
let newEl = designerCanvas.serviceContainer.elementAtPointService.getElementAtPoint(designerCanvas, { x: event.x, y: event.y });
|
|
35
|
+
const designItem = DesignItem.GetOrCreateDesignItem(newEl, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
35
36
|
if (!designerCanvas.instanceServiceContainer.selectionService.isSelected(designItem)) {
|
|
36
37
|
designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([designItem]);
|
|
37
38
|
}
|
|
@@ -21,6 +21,8 @@ export class RectangleSelectorTool {
|
|
|
21
21
|
this._rect.setAttribute('y', (this._initialPoint.y * designerCanvas.scaleFactor));
|
|
22
22
|
this._rect.setAttribute('width', 0);
|
|
23
23
|
this._rect.setAttribute('height', 0);
|
|
24
|
+
this._rect.style.strokeWidth = '' + (1 / designerCanvas.scaleFactor);
|
|
25
|
+
this._rect.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
|
|
24
26
|
designerCanvas.overlayLayer.addOverlay(this._rect, OverlayLayer.Foregorund);
|
|
25
27
|
break;
|
|
26
28
|
case EventNames.PointerMove:
|
|
@@ -20,6 +20,8 @@ export class ZoomTool {
|
|
|
20
20
|
this._rect.setAttribute('y', (this._startPoint.y * designerCanvas.zoomFactor));
|
|
21
21
|
this._rect.setAttribute('width', 0);
|
|
22
22
|
this._rect.setAttribute('height', 0);
|
|
23
|
+
this._rect.style.strokeWidth = '' + (1 / designerCanvas.scaleFactor);
|
|
24
|
+
this._rect.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
|
|
23
25
|
designerCanvas.overlayLayer.addOverlay(this._rect, OverlayLayer.Foregorund);
|
|
24
26
|
break;
|
|
25
27
|
case EventNames.PointerMove:
|
|
@@ -30,7 +30,7 @@ export class DesignerToolbarButton extends BaseCustomWebComponentConstructorAppe
|
|
|
30
30
|
this.tools = tools;
|
|
31
31
|
this._img = this._getDomElement('img');
|
|
32
32
|
this._div = this._getDomElement('div');
|
|
33
|
-
this.
|
|
33
|
+
this._div.onclick = () => {
|
|
34
34
|
if (this.popup) {
|
|
35
35
|
this.getRootNode().host.showPopup(this);
|
|
36
36
|
}
|