@node-projects/web-component-designer 0.0.48 → 0.0.52
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/GridHelper.d.ts +16 -0
- package/dist/elements/helper/GridHelper.js +107 -0
- package/dist/elements/helper/Helper.d.ts +3 -0
- package/dist/elements/helper/Helper.js +3 -0
- package/dist/elements/helper/LayoutHelper.d.ts +3 -0
- package/dist/elements/helper/LayoutHelper.js +47 -1
- package/dist/elements/helper/TransformHelper.d.ts +1 -0
- package/dist/elements/helper/TransformHelper.js +12 -0
- package/dist/elements/item/DesignItem.d.ts +4 -2
- package/dist/elements/item/DesignItem.js +6 -3
- package/dist/elements/item/IDesignItem.d.ts +4 -2
- package/dist/elements/services/htmlWriterService/HtmlWriterService.js +1 -6
- package/dist/elements/services/placementService/DefaultPlacementService.js +20 -8
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +15 -1
- package/dist/elements/services/placementService/GridPlacementService.js +52 -1
- package/dist/elements/services/undoService/transactionItems/CssStyleChangeAction.d.ts +2 -2
- package/dist/elements/widgets/designerView/DomConverter.d.ts +1 -1
- package/dist/elements/widgets/designerView/DomConverter.js +2 -0
- package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +2 -0
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -1
- package/dist/elements/widgets/designerView/designerCanvas.js +2 -2
- package/dist/elements/widgets/designerView/extensions/GridExtension.js +11 -97
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +2 -2
- package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.js +1 -1
- package/dist/elements/widgets/designerView/extensions/contextMenu/IContextMenuExtension.d.ts +2 -1
- package/dist/elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.js +4 -3
- package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.js +1 -1
- package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.js +1 -1
- package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +1 -1
- package/dist/elements/widgets/treeView/treeViewExtended.d.ts +2 -0
- package/dist/elements/widgets/treeView/treeViewExtended.js +13 -0
- package/dist/index.d.ts +1 -1
- package/package.json +1 -1
- package/dist/elements/controls/ImageButtonListSelector copy.d.ts +0 -17
- package/dist/elements/controls/ImageButtonListSelector copy.js +0 -82
- package/dist/elements/controls/NumericInput.d.ts +0 -0
- package/dist/elements/controls/NumericInput.js +0 -1
- package/dist/elements/controls/ThicknessEditor copy.d.ts +0 -33
- package/dist/elements/controls/ThicknessEditor copy.js +0 -145
- package/dist/elements/helper/CssPropertiesList.d.ts +0 -0
- package/dist/elements/helper/CssPropertiesList.js +0 -1
- package/dist/elements/item/Binding.d.ts +0 -14
- package/dist/elements/item/Binding.js +0 -4
- package/dist/elements/item/IBinding copy.d.ts +0 -14
- package/dist/elements/item/IBinding copy.js +0 -1
- package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService copy.d.ts +0 -9
- package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService copy.js +0 -31
- package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.d.ts +0 -11
- package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.js +0 -34
- package/dist/elements/services/bindingsService/BindingMode.d.ts +0 -4
- package/dist/elements/services/bindingsService/BindingMode.js +0 -5
- package/dist/elements/services/bindingsService/BindingTarget.d.ts +0 -6
- package/dist/elements/services/bindingsService/BindingTarget.js +0 -7
- package/dist/elements/services/bindingsService/IBinding.d.ts +0 -14
- package/dist/elements/services/bindingsService/IBinding.js +0 -1
- package/dist/elements/services/bindingsService/PolymerBindingsService copy.d.ts +0 -9
- package/dist/elements/services/bindingsService/PolymerBindingsService copy.js +0 -31
- package/dist/elements/services/bindingsService/PolymerBindingsService.d.ts +0 -0
- package/dist/elements/services/bindingsService/PolymerBindingsService.js +0 -38
- package/dist/elements/services/copyPasteService/ICopyPasteService copy.d.ts +0 -0
- package/dist/elements/services/copyPasteService/ICopyPasteService copy.js +0 -1
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.d.ts +0 -9
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.js +0 -100
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.d.ts +0 -11
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.js +0 -84
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.d.ts +0 -9
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.js +0 -83
- package/dist/elements/services/modelCommandService/DefaultInstanceService.d.ts +0 -8
- package/dist/elements/services/modelCommandService/DefaultInstanceService.js +0 -14
- package/dist/elements/services/modelCommandService/IInstanceService.d.ts +0 -8
- package/dist/elements/services/modelCommandService/IInstanceService.js +0 -1
- package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor copy.d.ts +0 -8
- package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor copy.js +0 -40
- package/dist/elements/services/propertiesService/services/CommonPropertiesService copy.d.ts +0 -16
- package/dist/elements/services/propertiesService/services/CommonPropertiesService copy.js +0 -94
- package/dist/elements/widgets/designerView/IDesignerView.d.ts +0 -30
- package/dist/elements/widgets/designerView/IDesignerView.js +0 -1
- package/dist/elements/widgets/designerView/designerView copy.d.ts +0 -82
- package/dist/elements/widgets/designerView/designerView copy.js +0 -671
- package/dist/elements/widgets/designerView/extensions/AbstractExtension copy.d.ts +0 -22
- package/dist/elements/widgets/designerView/extensions/AbstractExtension copy.js +0 -52
- package/dist/elements/widgets/designerView/extensions/CanvasExtension copy.d.ts +0 -10
- package/dist/elements/widgets/designerView/extensions/CanvasExtension copy.js +0 -29
- package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider copy.d.ts +0 -10
- package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider copy.js +0 -15
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtension.d.ts +0 -14
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtension.js +0 -42
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.d.ts +0 -9
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.js +0 -9
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtension.d.ts +0 -27
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtension.js +0 -61
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.d.ts +0 -9
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.js +0 -9
- package/dist/elements/widgets/designerView/extensions/PermamentCursorExtension.d.ts +0 -10
- package/dist/elements/widgets/designerView/extensions/PermamentCursorExtension.js +0 -29
- package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider copy.d.ts +0 -10
- package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider copy.js +0 -15
- package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider.d.ts +0 -10
- package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider.js +0 -15
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractExtension.d.ts +0 -22
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractExtension.js +0 -78
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension copy.d.ts +0 -13
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension copy.js +0 -27
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectangleExtension.d.ts +0 -7
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectangleExtension.js +0 -20
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension copy.d.ts +0 -13
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension copy.js +0 -27
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension.d.ts +0 -7
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension.js +0 -20
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtension.d.ts +0 -5
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtension.js +0 -1
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtensionProvider.d.ts +0 -9
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtensionProvider.js +0 -1
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerExtension.d.ts +0 -7
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerExtension.js +0 -20
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerPointerExtension.d.ts +0 -7
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerPointerExtension.js +0 -20
- package/dist/elements/widgets/propertyGrid/PropertyGrid copy.d.ts +0 -17
- package/dist/elements/widgets/propertyGrid/PropertyGrid copy.js +0 -143
- package/dist/interfaces/IDesignerMousePoint.d.ts +0 -11
- package/dist/interfaces/IDesignerMousePoint.js +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IDesignItem } from "../item/IDesignItem.js";
|
|
2
|
+
export declare function CalculateGridInformation(designItem: IDesignItem): {
|
|
3
|
+
cells?: {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
name: string;
|
|
9
|
+
}[][];
|
|
10
|
+
gaps?: {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
}[];
|
|
16
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
export function CalculateGridInformation(designItem) {
|
|
2
|
+
let itemRect = designItem.element.getBoundingClientRect();
|
|
3
|
+
const computedStyle = getComputedStyle(designItem.element);
|
|
4
|
+
const rows = computedStyle.gridTemplateRows.split(' ');
|
|
5
|
+
const columns = computedStyle.gridTemplateColumns.split(' ');
|
|
6
|
+
let y = 0;
|
|
7
|
+
let xGap = 0;
|
|
8
|
+
let yGap = 0;
|
|
9
|
+
let rw = 0;
|
|
10
|
+
let xOffset = itemRect.x - designItem.instanceServiceContainer.designerCanvas.containerBoundingRect.x;
|
|
11
|
+
let yOffset = itemRect.y - designItem.instanceServiceContainer.designerCanvas.containerBoundingRect.y;
|
|
12
|
+
let gridA = null;
|
|
13
|
+
if (computedStyle.gridTemplateAreas && computedStyle.gridTemplateAreas !== 'none')
|
|
14
|
+
gridA = computedStyle.gridTemplateAreas.split('\"');
|
|
15
|
+
if (computedStyle.columnGap && computedStyle.columnGap != 'normal')
|
|
16
|
+
xGap = Number.parseFloat(computedStyle.columnGap.replace('px', ''));
|
|
17
|
+
if (computedStyle.rowGap && computedStyle.rowGap != 'normal')
|
|
18
|
+
yGap = Number.parseFloat(computedStyle.rowGap.replace('px', ''));
|
|
19
|
+
let gesX = 0;
|
|
20
|
+
let gesY = 0;
|
|
21
|
+
for (let c of columns) {
|
|
22
|
+
const currX = Number.parseFloat(c.replace('px', ''));
|
|
23
|
+
gesX += currX + xGap;
|
|
24
|
+
}
|
|
25
|
+
gesX -= xGap;
|
|
26
|
+
for (let r of rows) {
|
|
27
|
+
const currY = Number.parseFloat(r.replace('px', ''));
|
|
28
|
+
gesY += currY + yGap;
|
|
29
|
+
}
|
|
30
|
+
gesY -= yGap;
|
|
31
|
+
if (computedStyle.justifyContent == 'center') {
|
|
32
|
+
xOffset += (itemRect.width - gesX) / 2;
|
|
33
|
+
}
|
|
34
|
+
else if (computedStyle.justifyContent == 'end') {
|
|
35
|
+
xOffset += itemRect.width - gesX;
|
|
36
|
+
}
|
|
37
|
+
else if (computedStyle.justifyContent == 'space-between') {
|
|
38
|
+
xGap += (itemRect.width - gesX) / (columns.length - 1);
|
|
39
|
+
}
|
|
40
|
+
else if (computedStyle.justifyContent == 'space-around') {
|
|
41
|
+
let gp = (itemRect.width - gesX) / (columns.length * 2);
|
|
42
|
+
xGap += gp * 2;
|
|
43
|
+
xOffset += gp;
|
|
44
|
+
}
|
|
45
|
+
else if (computedStyle.justifyContent == 'space-evenly') {
|
|
46
|
+
let gp = (itemRect.width - gesX) / (columns.length + 1);
|
|
47
|
+
xGap += gp;
|
|
48
|
+
xOffset += gp;
|
|
49
|
+
}
|
|
50
|
+
if (computedStyle.alignContent == 'center') {
|
|
51
|
+
xOffset += (itemRect.height - gesY) / 2;
|
|
52
|
+
}
|
|
53
|
+
else if (computedStyle.alignContent == 'end') {
|
|
54
|
+
xOffset += itemRect.height - gesY;
|
|
55
|
+
}
|
|
56
|
+
else if (computedStyle.alignContent == 'space-between') {
|
|
57
|
+
yGap += (itemRect.height - gesY) / (rows.length - 1);
|
|
58
|
+
}
|
|
59
|
+
else if (computedStyle.alignContent == 'space-around') {
|
|
60
|
+
let gp = (itemRect.height - gesY) / (rows.length * 2);
|
|
61
|
+
yGap += gp * 2;
|
|
62
|
+
yOffset += gp;
|
|
63
|
+
}
|
|
64
|
+
else if (computedStyle.alignContent == 'space-evenly') {
|
|
65
|
+
let gp = (itemRect.height - gesY) / (rows.length + 1);
|
|
66
|
+
yGap += gp;
|
|
67
|
+
yOffset += gp;
|
|
68
|
+
}
|
|
69
|
+
const retVal = { cells: [], gaps: [] };
|
|
70
|
+
for (let xIdx = 0; xIdx < rows.length; xIdx++) {
|
|
71
|
+
const r = rows[xIdx];
|
|
72
|
+
let areas = null;
|
|
73
|
+
if (gridA) {
|
|
74
|
+
areas = gridA[rw + 1].split(' ');
|
|
75
|
+
}
|
|
76
|
+
let x = 0;
|
|
77
|
+
let cl = 0;
|
|
78
|
+
const currY = Number.parseFloat(r.replace('px', ''));
|
|
79
|
+
let cellList = [];
|
|
80
|
+
retVal.cells.push(cellList);
|
|
81
|
+
for (let yIdx = 0; yIdx < columns.length; yIdx++) {
|
|
82
|
+
const c = columns[yIdx];
|
|
83
|
+
if (x > 0 && xGap) {
|
|
84
|
+
retVal.gaps.push({ x: x + xOffset, y: y + yOffset, width: xGap, height: currY });
|
|
85
|
+
x += xGap;
|
|
86
|
+
}
|
|
87
|
+
const currX = Number.parseFloat(c.replace('px', ''));
|
|
88
|
+
if (y > 0 && yGap) {
|
|
89
|
+
retVal.gaps.push({ x: x + xOffset, y: y + yOffset - yGap, width: currX, height: yGap });
|
|
90
|
+
}
|
|
91
|
+
let name = null;
|
|
92
|
+
if (areas) {
|
|
93
|
+
const nm = areas[cl].trim();
|
|
94
|
+
if (nm != '.') {
|
|
95
|
+
name = nm;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const cell = { x: x + xOffset, y: y + yOffset, width: currX, height: currY, name: name };
|
|
99
|
+
cellList.push(cell);
|
|
100
|
+
x += currX;
|
|
101
|
+
cl++;
|
|
102
|
+
}
|
|
103
|
+
y += currY + yGap;
|
|
104
|
+
rw += 2;
|
|
105
|
+
}
|
|
106
|
+
return retVal;
|
|
107
|
+
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { IPoint } from "../../interfaces/IPoint.js";
|
|
2
|
+
import { IRect } from "../../interfaces/IRect.js";
|
|
1
3
|
export declare function sleep(ms: any): Promise<unknown>;
|
|
2
4
|
export declare function exportData(blob: Blob, fileName: string): Promise<void>;
|
|
3
5
|
export declare function dataURItoBlob(dataURI: any): Blob;
|
|
6
|
+
export declare function pointInRect(point: IPoint, rect: IRect): boolean;
|
|
@@ -21,3 +21,6 @@ export function dataURItoBlob(dataURI) {
|
|
|
21
21
|
}
|
|
22
22
|
return new Blob([new Uint8Array(array)], { type: mime });
|
|
23
23
|
}
|
|
24
|
+
export function pointInRect(point, rect) {
|
|
25
|
+
return point.x >= rect.x && point.x <= rect.x + rect.width && point.y >= rect.y && point.y <= rect.y + rect.height;
|
|
26
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { IPoint } from "../../interfaces/IPoint.js";
|
|
2
|
+
import { IDesignItem } from "../item/IDesignItem.js";
|
|
3
|
+
export declare function placeDesignItem(container: IDesignItem, designItem: IDesignItem, offset: IPoint, mode: 'position' | 'transform' | 'margin' | 'padding'): void;
|
|
@@ -1,4 +1,50 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
//todo
|
|
3
2
|
//this function should return the correct property to change a layout, for example left/right when left or right is used,
|
|
4
3
|
//maybe margin on grid? or transform??
|
|
4
|
+
export function placeDesignItem(container, designItem, offset, mode) {
|
|
5
|
+
const movedElement = designItem.element;
|
|
6
|
+
const computedStyleMovedElement = getComputedStyle(movedElement);
|
|
7
|
+
if (mode === 'position') {
|
|
8
|
+
let positionedContainerElement = container.element;
|
|
9
|
+
let computedStylePositionedContainer = getComputedStyle(container.element);
|
|
10
|
+
while (computedStylePositionedContainer.position !== 'relative' && computedStylePositionedContainer.position !== 'absolute') {
|
|
11
|
+
positionedContainerElement = positionedContainerElement.parentElement;
|
|
12
|
+
computedStylePositionedContainer = getComputedStyle(positionedContainerElement);
|
|
13
|
+
}
|
|
14
|
+
let oldLeft = null;
|
|
15
|
+
let oldRight = null;
|
|
16
|
+
let oldTop = null;
|
|
17
|
+
let oldBottom = null;
|
|
18
|
+
let containerLeft = 0;
|
|
19
|
+
let containerRight = 0;
|
|
20
|
+
let containerTop = 0;
|
|
21
|
+
let containerBottom = 0;
|
|
22
|
+
if (computedStyleMovedElement.position === 'relative' || computedStyleMovedElement.position === 'absolute') {
|
|
23
|
+
oldLeft = parseFloat(movedElement.style.left);
|
|
24
|
+
oldLeft = Number.isNaN(oldLeft) ? null : oldLeft;
|
|
25
|
+
oldTop = parseFloat(movedElement.style.top);
|
|
26
|
+
oldTop = Number.isNaN(oldTop) ? null : oldTop;
|
|
27
|
+
oldRight = parseFloat(movedElement.style.right);
|
|
28
|
+
oldRight = Number.isNaN(oldRight) ? null : oldRight;
|
|
29
|
+
oldBottom = parseFloat(movedElement.style.bottom);
|
|
30
|
+
oldBottom = Number.isNaN(oldBottom) ? null : oldBottom;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
if (positionedContainerElement !== container.element) {
|
|
34
|
+
let posContainerRect = positionedContainerElement.getBoundingClientRect();
|
|
35
|
+
let elementRect = designItem.element.getBoundingClientRect();
|
|
36
|
+
containerLeft = elementRect.left - posContainerRect.left;
|
|
37
|
+
containerRight = elementRect.right - posContainerRect.right;
|
|
38
|
+
containerTop = elementRect.top - posContainerRect.top;
|
|
39
|
+
containerBottom = elementRect.bottom - posContainerRect.bottom;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
designItem.element.style.transform = designItem.styles.get('transform') ?? '';
|
|
43
|
+
designItem.setStyle('position', 'absolute');
|
|
44
|
+
designItem.setStyle('left', (offset.x + oldLeft + containerLeft) + "px");
|
|
45
|
+
designItem.setStyle('top', (offset.y + oldTop + containerTop) + "px");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/*function placeViaPosition(container: IDesignItem, designItem: IDesignItem, offset: IPoint, mode: 'position' | 'transform' | 'margin' | 'padding') {
|
|
49
|
+
|
|
50
|
+
}*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function combineTransforms(element: HTMLElement, transform1: string, transform2: string): void;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function combineTransforms(element, transform1, transform2) {
|
|
2
|
+
if (transform1 == null || transform1 == '') {
|
|
3
|
+
element.style.transform = transform2;
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
element.style.transform = transform1;
|
|
7
|
+
const matrix1 = new DOMMatrix(window.getComputedStyle(element).transform);
|
|
8
|
+
element.style.transform = transform2;
|
|
9
|
+
const matrix2 = new DOMMatrix(window.getComputedStyle(element).transform);
|
|
10
|
+
const result = matrix2.multiply(matrix1);
|
|
11
|
+
element.style.transform = result.toString();
|
|
12
|
+
}
|
|
@@ -5,7 +5,9 @@ import { ChangeGroup } from '../services/undoService/ChangeGroup';
|
|
|
5
5
|
import { NodeType } from './NodeType';
|
|
6
6
|
import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType';
|
|
7
7
|
import { IDesignerExtension } from '../widgets/designerView/extensions/IDesignerExtension';
|
|
8
|
+
import { ISize } from '../../interfaces/ISize.js';
|
|
8
9
|
export declare class DesignItem implements IDesignItem {
|
|
10
|
+
lastContainerSize: ISize;
|
|
9
11
|
node: Node;
|
|
10
12
|
serviceContainer: ServiceContainer;
|
|
11
13
|
instanceServiceContainer: InstanceServiceContainer;
|
|
@@ -51,8 +53,8 @@ export declare class DesignItem implements IDesignItem {
|
|
|
51
53
|
getOrCreateDesignItem(node: Node): IDesignItem;
|
|
52
54
|
static GetOrCreateDesignItem(node: Node, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): IDesignItem;
|
|
53
55
|
static GetDesignItem(node: Node): IDesignItem;
|
|
54
|
-
setStyle(name:
|
|
55
|
-
removeStyle(name:
|
|
56
|
+
setStyle(name: string, value?: string | null): void;
|
|
57
|
+
removeStyle(name: string): void;
|
|
56
58
|
setAttribute(name: string, value?: string | null): void;
|
|
57
59
|
removeAttribute(name: string): void;
|
|
58
60
|
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { CssStyleChangeAction } from '../services/undoService/transactionItems/CssStyleChangeAction';
|
|
2
2
|
import { NodeType } from './NodeType';
|
|
3
3
|
import { AttributeChangeAction } from '../services/undoService/transactionItems/AttributeChangeAction';
|
|
4
|
-
//import { PropertyChangeAction } from '../services/undoService/transactionItems/PropertyChangeAction';
|
|
5
4
|
import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType';
|
|
6
5
|
import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper';
|
|
7
6
|
import { CssAttributeParser } from '../helper/CssAttributeParser.js';
|
|
7
|
+
import { PropertiesHelper } from '../services/propertiesService/services/PropertiesHelper.js';
|
|
8
8
|
const hideAtDesignTimeAttributeName = 'node-projects-hide-at-design-time';
|
|
9
9
|
const hideAtRunTimeAttributeName = 'node-projects-hide-at-run-time';
|
|
10
10
|
const lockAtDesignTimeAttributeName = 'node-projects-lock-at-design-time';
|
|
11
11
|
export class DesignItem {
|
|
12
|
+
lastContainerSize;
|
|
12
13
|
node;
|
|
13
14
|
serviceContainer;
|
|
14
15
|
instanceServiceContainer;
|
|
@@ -241,11 +242,13 @@ export class DesignItem {
|
|
|
241
242
|
return designItem;
|
|
242
243
|
}
|
|
243
244
|
setStyle(name, value) {
|
|
244
|
-
|
|
245
|
+
let nm = PropertiesHelper.camelToDashCase(name);
|
|
246
|
+
const action = new CssStyleChangeAction(this, nm, value, this.styles.get(nm));
|
|
245
247
|
this.instanceServiceContainer.undoService.execute(action);
|
|
246
248
|
}
|
|
247
249
|
removeStyle(name) {
|
|
248
|
-
|
|
250
|
+
let nm = PropertiesHelper.camelToDashCase(name);
|
|
251
|
+
const action = new CssStyleChangeAction(this, nm, '', this.styles.get(nm));
|
|
249
252
|
this.instanceServiceContainer.undoService.execute(action);
|
|
250
253
|
}
|
|
251
254
|
setAttribute(name, value) {
|
|
@@ -4,7 +4,9 @@ import { ChangeGroup } from "../services/undoService/ChangeGroup";
|
|
|
4
4
|
import { NodeType } from './NodeType';
|
|
5
5
|
import { ExtensionType } from "../widgets/designerView/extensions/ExtensionType";
|
|
6
6
|
import { IDesignerExtension } from "../widgets/designerView/extensions/IDesignerExtension";
|
|
7
|
+
import { ISize } from "../../interfaces/ISize.js";
|
|
7
8
|
export interface IDesignItem {
|
|
9
|
+
lastContainerSize: ISize;
|
|
8
10
|
replaceNode(newNode: Node): any;
|
|
9
11
|
readonly nodeType: NodeType;
|
|
10
12
|
readonly name: string;
|
|
@@ -33,8 +35,8 @@ export interface IDesignItem {
|
|
|
33
35
|
appliedDesignerExtensions: Map<ExtensionType, IDesignerExtension[]>;
|
|
34
36
|
getOrCreateDesignItem(node: Node): any;
|
|
35
37
|
openGroup(title: string, affectedItems?: IDesignItem[]): ChangeGroup;
|
|
36
|
-
setStyle(name:
|
|
37
|
-
removeStyle(name:
|
|
38
|
+
setStyle(name: string, value?: string | null): any;
|
|
39
|
+
removeStyle(name: string): any;
|
|
38
40
|
setAttribute(name: string, value?: string | null): any;
|
|
39
41
|
removeAttribute(name: string): any;
|
|
40
42
|
hideAtDesignTime: boolean;
|
|
@@ -53,12 +53,7 @@ export class HtmlWriterService {
|
|
|
53
53
|
styles = CssCombiner.combine(styles);
|
|
54
54
|
for (const s of styles) {
|
|
55
55
|
if (s[0]) {
|
|
56
|
-
|
|
57
|
-
indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
//TODO: writing of bindings
|
|
61
|
-
}
|
|
56
|
+
indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
62
57
|
}
|
|
63
58
|
}
|
|
64
59
|
indentedTextWriter.write('"');
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { DomConverter } from '../../widgets/designerView/DomConverter.js';
|
|
2
|
+
import { combineTransforms } from '../../helper/TransformHelper.js';
|
|
3
|
+
import { placeDesignItem } from '../../helper/LayoutHelper.js';
|
|
2
4
|
export class DefaultPlacementService {
|
|
3
5
|
serviceForContainer(container) {
|
|
4
6
|
if (container.element.style.display === 'grid' || container.element.style.display === 'inline-grid' ||
|
|
@@ -78,26 +80,36 @@ export class DefaultPlacementService {
|
|
|
78
80
|
let track = this.calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, items[0]);
|
|
79
81
|
//TODO: -> what is if a transform already exists -> backup existing style.?
|
|
80
82
|
for (const designItem of items) {
|
|
81
|
-
|
|
83
|
+
const newTransform = 'translate(' + track.x + 'px, ' + track.y + 'px)';
|
|
84
|
+
combineTransforms(designItem.element, designItem.styles.get('transform'), newTransform);
|
|
82
85
|
}
|
|
83
86
|
}
|
|
84
87
|
enterContainer(container, items) {
|
|
88
|
+
for (let i of items) {
|
|
89
|
+
if (i.lastContainerSize) {
|
|
90
|
+
if (!i.styles.has('width'))
|
|
91
|
+
i.setStyle('width', i.lastContainerSize.width + 'px');
|
|
92
|
+
if (!i.styles.has('height'))
|
|
93
|
+
i.setStyle('height', i.lastContainerSize.height + 'px');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
85
96
|
}
|
|
86
97
|
leaveContainer(container, items) {
|
|
87
98
|
}
|
|
88
99
|
finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
89
100
|
let track = this.calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, items[0]);
|
|
90
101
|
for (const designItem of items) {
|
|
91
|
-
let movedElement = designItem.element;
|
|
92
|
-
let oldLeft = parseFloat(movedElement.style.left);
|
|
102
|
+
/*let movedElement = designItem.element;
|
|
103
|
+
let oldLeft = parseFloat((<HTMLElement>movedElement).style.left);
|
|
93
104
|
oldLeft = Number.isNaN(oldLeft) ? 0 : oldLeft;
|
|
94
|
-
let oldTop = parseFloat(movedElement.style.top);
|
|
95
|
-
oldTop = Number.isNaN(oldTop) ? 0 : oldTop
|
|
105
|
+
let oldTop = parseFloat((<HTMLElement>movedElement).style.top);
|
|
106
|
+
oldTop = Number.isNaN(oldTop) ? 0 : oldTop;*/
|
|
96
107
|
//let oldPosition = movedElement.style.position;
|
|
97
|
-
designItem.element.style.transform =
|
|
98
|
-
|
|
108
|
+
designItem.element.style.transform = designItem.styles.get('transform') ?? '';
|
|
109
|
+
placeDesignItem(container, designItem, track, 'position');
|
|
110
|
+
/*designItem.setStyle('position', 'absolute');
|
|
99
111
|
designItem.setStyle('left', (track.x + oldLeft) + "px");
|
|
100
|
-
designItem.setStyle('top', (track.y + oldTop) + "px")
|
|
112
|
+
designItem.setStyle('top', (track.y + oldTop) + "px");*/
|
|
101
113
|
}
|
|
102
114
|
}
|
|
103
115
|
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
export class FlexBoxPlacementService {
|
|
2
2
|
enterContainer(container, items) {
|
|
3
|
+
for (let i of items) {
|
|
4
|
+
i.removeStyle("position");
|
|
5
|
+
i.removeStyle("left");
|
|
6
|
+
i.removeStyle("top");
|
|
7
|
+
i.removeStyle("right");
|
|
8
|
+
i.removeStyle("transform");
|
|
9
|
+
}
|
|
3
10
|
}
|
|
4
11
|
leaveContainer(container, items) {
|
|
5
12
|
}
|
|
@@ -15,13 +22,20 @@ export class FlexBoxPlacementService {
|
|
|
15
22
|
return true;
|
|
16
23
|
}
|
|
17
24
|
getElementOffset(container, designItem) {
|
|
18
|
-
//TODO: offset could be bigger, when it was in a other cell???
|
|
19
25
|
return container.element.getBoundingClientRect();
|
|
20
26
|
}
|
|
21
27
|
placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
22
28
|
return null;
|
|
23
29
|
}
|
|
24
30
|
place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
31
|
+
/*let direction = getComputedStyle(container.element).flexDirection;
|
|
32
|
+
|
|
33
|
+
const pos = (<IDesignerCanvas><unknown>placementView).getNormalizedEventCoordinates(event);
|
|
34
|
+
const posElement = (<IDesignerCanvas><unknown>placementView).getNormalizedElementCoordinates(items[0].element)
|
|
35
|
+
|
|
36
|
+
for (let e of container.element.children) {
|
|
37
|
+
|
|
38
|
+
}*/
|
|
25
39
|
}
|
|
26
40
|
finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
27
41
|
}
|
|
@@ -1,7 +1,24 @@
|
|
|
1
|
+
import { CalculateGridInformation } from '../../helper/GridHelper.js';
|
|
2
|
+
import { pointInRect } from '../../helper/Helper.js';
|
|
1
3
|
export class GridPlacementService {
|
|
2
4
|
enterContainer(container, items) {
|
|
5
|
+
for (let i of items) {
|
|
6
|
+
i.removeStyle("position");
|
|
7
|
+
i.removeStyle("left");
|
|
8
|
+
i.removeStyle("top");
|
|
9
|
+
i.removeStyle("right");
|
|
10
|
+
i.removeStyle("width");
|
|
11
|
+
i.removeStyle("height");
|
|
12
|
+
i.removeStyle("transform");
|
|
13
|
+
}
|
|
3
14
|
}
|
|
4
15
|
leaveContainer(container, items) {
|
|
16
|
+
for (let i of items) {
|
|
17
|
+
if (!i.lastContainerSize) {
|
|
18
|
+
const rect = i.element.getBoundingClientRect();
|
|
19
|
+
i.lastContainerSize = { width: rect.width, height: rect.height };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
5
22
|
}
|
|
6
23
|
serviceForContainer(container) {
|
|
7
24
|
if (container.element.style.display == 'grid' || container.element.style.display == 'inline-grid')
|
|
@@ -15,14 +32,48 @@ export class GridPlacementService {
|
|
|
15
32
|
return true;
|
|
16
33
|
}
|
|
17
34
|
getElementOffset(container, designItem) {
|
|
18
|
-
//TODO: offset could be bigger, when it was in a other cell???
|
|
19
35
|
return container.element.getBoundingClientRect();
|
|
20
36
|
}
|
|
21
37
|
placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
22
38
|
return null;
|
|
23
39
|
}
|
|
24
40
|
place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
41
|
+
const gridInformation = CalculateGridInformation(container);
|
|
42
|
+
const pos = placementView.getNormalizedEventCoordinates(event);
|
|
43
|
+
const posElement = placementView.getNormalizedElementCoordinates(items[0].element);
|
|
44
|
+
let row = 0;
|
|
45
|
+
let column = 0;
|
|
46
|
+
if (!pointInRect(pos, posElement)) {
|
|
47
|
+
row = 0;
|
|
48
|
+
for (let cellRow of gridInformation.cells) {
|
|
49
|
+
column = 0;
|
|
50
|
+
for (let cell of cellRow) {
|
|
51
|
+
if (pointInRect(pos, cell)) {
|
|
52
|
+
items[0].element.style.gridColumn = column + 1;
|
|
53
|
+
items[0].element.style.gridRow = row + 1;
|
|
54
|
+
}
|
|
55
|
+
column++;
|
|
56
|
+
}
|
|
57
|
+
row++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
25
60
|
}
|
|
26
61
|
finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
62
|
+
const gridInformation = CalculateGridInformation(container);
|
|
63
|
+
const pos = placementView.getNormalizedEventCoordinates(event);
|
|
64
|
+
let row = 0;
|
|
65
|
+
let column = 0;
|
|
66
|
+
row = 0;
|
|
67
|
+
for (let cellRow of gridInformation.cells) {
|
|
68
|
+
column = 0;
|
|
69
|
+
for (let cell of cellRow) {
|
|
70
|
+
if (pointInRect(pos, cell)) {
|
|
71
|
+
items[0].setStyle('grid-column', column + 1);
|
|
72
|
+
items[0].setStyle('grid-row', row + 1);
|
|
73
|
+
}
|
|
74
|
+
column++;
|
|
75
|
+
}
|
|
76
|
+
row++;
|
|
77
|
+
}
|
|
27
78
|
}
|
|
28
79
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { ITransactionItem } from '../ITransactionItem';
|
|
2
2
|
import { IDesignItem } from '../../../item/IDesignItem';
|
|
3
3
|
export declare class CssStyleChangeAction implements ITransactionItem {
|
|
4
|
-
constructor(designItem: IDesignItem, name:
|
|
4
|
+
constructor(designItem: IDesignItem, name: string, newValue: any, oldValue: any);
|
|
5
5
|
title?: string;
|
|
6
6
|
get affectedItems(): IDesignItem[];
|
|
7
7
|
undo(): void;
|
|
8
8
|
do(): void;
|
|
9
9
|
designItem: IDesignItem;
|
|
10
|
-
name:
|
|
10
|
+
name: string;
|
|
11
11
|
newValue: any;
|
|
12
12
|
oldValue: any;
|
|
13
13
|
mergeWith(other: ITransactionItem): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IDesignItem } from "../../item/IDesignItem";
|
|
2
2
|
import { IStringPosition } from "../../services/htmlWriterService/IStringPosition";
|
|
3
3
|
export declare class DomConverter {
|
|
4
|
-
static normalizeAttributeValue(value: string): string;
|
|
4
|
+
static normalizeAttributeValue(value: string | number): string;
|
|
5
5
|
static normalizeContentValue(value: string): string;
|
|
6
6
|
static IsSelfClosingElement(tag: string): boolean;
|
|
7
7
|
static ConvertToString(designItems: IDesignItem[], designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): string;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { IndentedTextWriter } from "../../helper/IndentedTextWriter";
|
|
2
2
|
export class DomConverter {
|
|
3
3
|
static normalizeAttributeValue(value) {
|
|
4
|
+
if (typeof value === 'number')
|
|
5
|
+
value = value.toString();
|
|
4
6
|
if (value)
|
|
5
7
|
return value.replaceAll('"', '"');
|
|
6
8
|
return value;
|
|
@@ -7,6 +7,7 @@ import { IExtensionManager } from "./extensions/IExtensionManger";
|
|
|
7
7
|
import { IUiCommandHandler } from "../../../commandHandling/IUiCommandHandler";
|
|
8
8
|
import { IPoint } from "../../../interfaces/IPoint";
|
|
9
9
|
import { OverlayLayerView } from "./overlayLayerView";
|
|
10
|
+
import { IRect } from "../../../interfaces/IRect.js";
|
|
10
11
|
export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
|
|
11
12
|
readonly serviceContainer: ServiceContainer;
|
|
12
13
|
readonly instanceServiceContainer: InstanceServiceContainer;
|
|
@@ -22,6 +23,7 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
|
|
|
22
23
|
eatEvents: Element;
|
|
23
24
|
initialize(serviceContainer: ServiceContainer): any;
|
|
24
25
|
getNormalizedEventCoordinates(event: MouseEvent): IPoint;
|
|
26
|
+
getNormalizedElementCoordinates(element: Element): IRect;
|
|
25
27
|
getNormalizedOffsetInElement(event: MouseEvent, element: Element): IPoint;
|
|
26
28
|
getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): any;
|
|
27
29
|
elementFromPoint(x: number, y: number): Element;
|
|
@@ -12,6 +12,7 @@ import { IExtensionManager } from "./extensions/IExtensionManger";
|
|
|
12
12
|
import { IPoint } from "../../../interfaces/IPoint";
|
|
13
13
|
import { OverlayLayer } from "./extensions/OverlayLayer";
|
|
14
14
|
import { OverlayLayerView } from './overlayLayerView';
|
|
15
|
+
import { IRect } from "../../../interfaces/IRect.js";
|
|
15
16
|
export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend implements IDesignerCanvas, IPlacementView, IUiCommandHandler {
|
|
16
17
|
serviceContainer: ServiceContainer;
|
|
17
18
|
instanceServiceContainer: InstanceServiceContainer;
|
|
@@ -69,7 +70,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
69
70
|
private onKeyUp;
|
|
70
71
|
private onKeyDown;
|
|
71
72
|
getNormalizedEventCoordinates(event: MouseEvent): IPoint;
|
|
72
|
-
getNormalizedElementCoordinates(element: Element):
|
|
73
|
+
getNormalizedElementCoordinates(element: Element): IRect;
|
|
73
74
|
getNormalizedOffsetInElement(event: MouseEvent, element: Element): IPoint;
|
|
74
75
|
static getHost(node: Node): Element;
|
|
75
76
|
getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): HTMLElement;
|
|
@@ -397,7 +397,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
397
397
|
showDesignItemContextMenu(designItem, event) {
|
|
398
398
|
const mnuItems = [];
|
|
399
399
|
for (let cme of this.serviceContainer.designerContextMenuExtensions) {
|
|
400
|
-
if (cme.shouldProvideContextmenu(event, this, designItem)) {
|
|
400
|
+
if (cme.shouldProvideContextmenu(event, this, designItem, 'designer')) {
|
|
401
401
|
mnuItems.push(...cme.provideContextMenuItems(event, this, designItem));
|
|
402
402
|
}
|
|
403
403
|
}
|
|
@@ -489,7 +489,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
489
489
|
}
|
|
490
490
|
getNormalizedElementCoordinates(element) {
|
|
491
491
|
const targetRect = element.getBoundingClientRect();
|
|
492
|
-
return { x: targetRect.x - this.containerBoundingRect.x, y: targetRect.y - this.containerBoundingRect.y };
|
|
492
|
+
return { x: targetRect.x - this.containerBoundingRect.x, y: targetRect.y - this.containerBoundingRect.y, width: targetRect.width, height: targetRect.height };
|
|
493
493
|
}
|
|
494
494
|
getNormalizedOffsetInElement(event, element) {
|
|
495
495
|
const normEvt = this.getNormalizedEventCoordinates(event);
|