@node-projects/web-component-designer 0.0.150 → 0.0.152
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/ElementHelper.d.ts +5 -0
- package/dist/elements/helper/ElementHelper.js +20 -0
- package/dist/elements/helper/GridHelper.js +2 -2
- package/dist/elements/helper/LayoutHelper.js +8 -2
- package/dist/elements/helper/TransformHelper.d.ts +17 -3
- package/dist/elements/helper/TransformHelper.js +204 -13
- package/dist/elements/services/DefaultServiceBootstrap.js +10 -2
- package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/DefaultPlacementService.js +24 -8
- package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +2 -0
- package/dist/elements/services/placementService/GridPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/GridPlacementService.js +2 -0
- package/dist/elements/services/placementService/IPlacementService.d.ts +1 -0
- package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +4 -0
- package/dist/elements/widgets/designerView/IPlacementView.d.ts +0 -1
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -2
- package/dist/elements/widgets/designerView/designerCanvas.js +10 -8
- package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.d.ts +2 -0
- package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.js +8 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +1 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +2 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionType.js +1 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtension.js +20 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.d.ts +6 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js +21 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.js +17 -0
- package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js +3 -2
- package/dist/elements/widgets/designerView/extensions/GridExtension copy.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/GridExtension copy.js +30 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.d.ts +6 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.js +21 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider copy.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider copy.js +18 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider.js +2 -1
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.js +3 -2
- package/dist/elements/widgets/designerView/extensions/MouseOverExtension.js +3 -4
- package/dist/elements/widgets/designerView/extensions/PlacementExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/PlacementExtension.js +22 -0
- package/dist/elements/widgets/designerView/extensions/PlacementExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/PlacementExtensionProvider.js +13 -0
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.d.ts +3 -1
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +201 -41
- package/dist/elements/widgets/designerView/extensions/RotateExtension.d.ts +8 -2
- package/dist/elements/widgets/designerView/extensions/RotateExtension.js +77 -43
- package/dist/elements/widgets/designerView/extensions/RotateExtensionProvider.js +1 -0
- package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.d.ts +4 -1
- package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +14 -9
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +30 -20
- package/dist/elements/widgets/designerView/overlayLayerView.d.ts +1 -0
- package/dist/elements/widgets/designerView/overlayLayerView.js +10 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.js +16 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/interfaces/IPoint3D.d.ts +5 -0
- package/dist/interfaces/IPoint3D.js +1 -0
- package/package.json +1 -1
|
@@ -9,3 +9,8 @@ export declare function isInlineAfter(element: HTMLElement): boolean;
|
|
|
9
9
|
export declare function getElementDisplaytype(element: HTMLElement): ElementDisplayType;
|
|
10
10
|
export declare function isEmptyTextNode(node: Node): boolean;
|
|
11
11
|
export declare function getActiveElement(): Element;
|
|
12
|
+
export declare function getParentElementIncludingSlots(element: Element): Element;
|
|
13
|
+
export declare function getElementsWindowOffsetWithoutSelfAndParentTransformations(element: any): {
|
|
14
|
+
offsetLeft: number;
|
|
15
|
+
offsetTop: number;
|
|
16
|
+
};
|
|
@@ -33,3 +33,23 @@ export function getActiveElement() {
|
|
|
33
33
|
}
|
|
34
34
|
return activeElement;
|
|
35
35
|
}
|
|
36
|
+
export function getParentElementIncludingSlots(element) {
|
|
37
|
+
if (element.assignedSlot)
|
|
38
|
+
return element.assignedSlot;
|
|
39
|
+
if (element.parentElement == null) {
|
|
40
|
+
if (element.parentNode instanceof ShadowRoot) {
|
|
41
|
+
return element.parentNode.host;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return element.parentElement;
|
|
45
|
+
}
|
|
46
|
+
export function getElementsWindowOffsetWithoutSelfAndParentTransformations(element) {
|
|
47
|
+
var offsetLeft = 0;
|
|
48
|
+
var offsetTop = 0;
|
|
49
|
+
while (element) {
|
|
50
|
+
offsetLeft += element.offsetLeft;
|
|
51
|
+
offsetTop += element.offsetTop;
|
|
52
|
+
element = element.offsetParent;
|
|
53
|
+
}
|
|
54
|
+
return { offsetLeft: offsetLeft, offsetTop: offsetTop };
|
|
55
|
+
}
|
|
@@ -75,7 +75,7 @@ export function CalculateGridInformation(designItem) {
|
|
|
75
75
|
for (let xIdx = 0; xIdx < rows.length; xIdx++) {
|
|
76
76
|
const r = rows[xIdx];
|
|
77
77
|
let areas = null;
|
|
78
|
-
if (gridA) {
|
|
78
|
+
if (gridA && gridA[rw + 1]) {
|
|
79
79
|
areas = gridA[rw + 1].split(' ');
|
|
80
80
|
}
|
|
81
81
|
let x = 0;
|
|
@@ -94,7 +94,7 @@ export function CalculateGridInformation(designItem) {
|
|
|
94
94
|
retVal.gaps.push({ x: x + xOffset + paddingLeft, y: y + yOffset - yGap + paddingTop, width: currX, height: yGap });
|
|
95
95
|
}
|
|
96
96
|
let name = null;
|
|
97
|
-
if (areas) {
|
|
97
|
+
if (areas && areas[cl]) {
|
|
98
98
|
const nm = areas[cl].trim();
|
|
99
99
|
if (nm != '.') {
|
|
100
100
|
name = nm;
|
|
@@ -58,8 +58,14 @@ export function placeDesignItem(container, designItem, offset, mode) {
|
|
|
58
58
|
}
|
|
59
59
|
if (!hasPositionedLayout)
|
|
60
60
|
designItem.setStyle('position', 'absolute');
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
if (oldLeft || oldRight == null)
|
|
62
|
+
designItem.setStyle('left', (offset.x + (oldLeft ?? 0) + containerLeft) + "px");
|
|
63
|
+
if (oldTop || oldBottom == null)
|
|
64
|
+
designItem.setStyle('top', (offset.y + (oldTop ?? 0) + containerTop) + "px");
|
|
65
|
+
if (oldRight)
|
|
66
|
+
designItem.setStyle('right', ((oldRight ?? 0) - offset.x + containerRight) + "px");
|
|
67
|
+
if (oldBottom)
|
|
68
|
+
designItem.setStyle('bottom', ((oldBottom ?? 0) - offset.y + containerBottom) + "px");
|
|
63
69
|
}
|
|
64
70
|
}
|
|
65
71
|
/*function placeViaPosition(container: IDesignItem, designItem: IDesignItem, offset: IPoint, mode: 'position' | 'transform' | 'margin' | 'padding') {
|
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
import { IPoint } from "../../
|
|
2
|
-
|
|
1
|
+
import { IPoint } from "../../interfaces/IPoint.js";
|
|
2
|
+
import { IDesignerCanvas } from "../widgets/designerView/IDesignerCanvas.js";
|
|
3
|
+
export declare function combineTransforms(element: HTMLElement, actualTransforms: string, requestedTransformation: string): void;
|
|
3
4
|
export declare function getDomMatrix(element: HTMLElement): DOMMatrix;
|
|
4
|
-
export declare function convertCoordinates(point:
|
|
5
|
+
export declare function convertCoordinates(point: DOMPoint, matrix: DOMMatrix): DOMPoint;
|
|
6
|
+
export declare function getRotationMatrix3d(axisOfRotation: 'x' | 'y' | 'z' | 'X' | 'Y' | 'Z', angle: number): any[];
|
|
7
|
+
export declare function rotateElementByMatrix3d(element: HTMLElement, matrix: number[]): void;
|
|
8
|
+
export declare function matrixArrayToCssMatrix(matrixArray: number[]): string;
|
|
9
|
+
export declare function cssMatrixToMatrixArray(cssMatrix: string): number[];
|
|
10
|
+
export declare function getRotationAngleFromMatrix(matrixArray: number[], domMatrix: DOMMatrix): any;
|
|
11
|
+
export declare function addVectors(vectorA: [number, number], vectorB: [number, number]): [number, number];
|
|
12
|
+
export declare function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element: HTMLElement, designerCanvas: IDesignerCanvas): DOMPoint;
|
|
13
|
+
export declare function getResultingTransformationBetweenElementAndAllAncestors(element: HTMLElement, ancestor: HTMLElement, excludeAncestor?: boolean): DOMMatrix;
|
|
14
|
+
export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas): IPoint;
|
|
15
|
+
export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: number, designerCanvas: IDesignerCanvas): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
|
|
16
|
+
export declare function extractTranslationFromDOMMatrix(matrix: DOMMatrix): DOMPoint;
|
|
17
|
+
export declare function extractRotationAngleFromDOMMatrix(matrix: DOMMatrix): number;
|
|
18
|
+
export declare function normalizeToAbsolutePosition(element: HTMLElement, normalizeProperty: "left" | "top"): string;
|
|
@@ -1,21 +1,212 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { getElementsWindowOffsetWithoutSelfAndParentTransformations, getParentElementIncludingSlots } from "./ElementHelper.js";
|
|
2
|
+
let identityMatrix = [
|
|
3
|
+
1, 0, 0, 0,
|
|
4
|
+
0, 1, 0, 0,
|
|
5
|
+
0, 0, 1, 0,
|
|
6
|
+
0, 0, 0, 1
|
|
7
|
+
];
|
|
8
|
+
export function combineTransforms(element, actualTransforms, requestedTransformation) {
|
|
9
|
+
if (actualTransforms == null || actualTransforms == '') {
|
|
10
|
+
element.style.transform = requestedTransformation;
|
|
4
11
|
return;
|
|
5
12
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
helperElement.style.transform = transform2;
|
|
11
|
-
const matrix2 = new DOMMatrix(window.getComputedStyle(helperElement).transform);
|
|
12
|
-
const result = matrix2.multiply(matrix1);
|
|
13
|
-
element.style.transform = result.toString();
|
|
13
|
+
const actualTransformationMatrix = new DOMMatrix(actualTransforms);
|
|
14
|
+
const requestedTransformationMatrix = new DOMMatrix(requestedTransformation);
|
|
15
|
+
const newTransformationMatrix = requestedTransformationMatrix.multiply(actualTransformationMatrix);
|
|
16
|
+
element.style.transform = newTransformationMatrix.toString();
|
|
14
17
|
}
|
|
15
18
|
export function getDomMatrix(element) {
|
|
16
19
|
return new DOMMatrix(window.getComputedStyle(element).transform);
|
|
17
20
|
}
|
|
18
21
|
export function convertCoordinates(point, matrix) {
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
return point.matrixTransform(matrix.inverse());
|
|
23
|
+
}
|
|
24
|
+
export function getRotationMatrix3d(axisOfRotation, angle) {
|
|
25
|
+
const angleInRadians = angle / 180 * Math.PI;
|
|
26
|
+
const sin = Math.sin;
|
|
27
|
+
const cos = Math.cos;
|
|
28
|
+
let rotationMatrix3d = [];
|
|
29
|
+
switch (axisOfRotation.toLowerCase()) {
|
|
30
|
+
case 'x':
|
|
31
|
+
rotationMatrix3d = [
|
|
32
|
+
1, 0, 0, 0,
|
|
33
|
+
0, cos(angleInRadians), -sin(angleInRadians), 0,
|
|
34
|
+
0, sin(angleInRadians), cos(angleInRadians), 0,
|
|
35
|
+
0, 0, 0, 1
|
|
36
|
+
];
|
|
37
|
+
break;
|
|
38
|
+
case 'y':
|
|
39
|
+
rotationMatrix3d = [
|
|
40
|
+
cos(angleInRadians), 0, sin(angleInRadians), 0,
|
|
41
|
+
0, 1, 0, 0,
|
|
42
|
+
-sin(angleInRadians), 0, cos(angleInRadians), 0,
|
|
43
|
+
0, 0, 0, 1
|
|
44
|
+
];
|
|
45
|
+
break;
|
|
46
|
+
case 'z':
|
|
47
|
+
rotationMatrix3d = [
|
|
48
|
+
cos(angleInRadians), -sin(angleInRadians), 0, 0,
|
|
49
|
+
sin(angleInRadians), cos(angleInRadians), 0, 0,
|
|
50
|
+
0, 0, 1, 0,
|
|
51
|
+
0, 0, 0, 1
|
|
52
|
+
];
|
|
53
|
+
break;
|
|
54
|
+
default:
|
|
55
|
+
rotationMatrix3d = null;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
return rotationMatrix3d;
|
|
59
|
+
}
|
|
60
|
+
export function rotateElementByMatrix3d(element, matrix) {
|
|
61
|
+
element.style.transform = matrixArrayToCssMatrix(matrix);
|
|
62
|
+
}
|
|
63
|
+
export function matrixArrayToCssMatrix(matrixArray) {
|
|
64
|
+
return "matrix3d(" + matrixArray.join(',') + ")";
|
|
65
|
+
}
|
|
66
|
+
export function cssMatrixToMatrixArray(cssMatrix) {
|
|
67
|
+
if (!cssMatrix.includes('matrix')) {
|
|
68
|
+
if (cssMatrix != 'none')
|
|
69
|
+
console.error('cssMatrixToMatrixArray: no css matrix passed');
|
|
70
|
+
return identityMatrix;
|
|
71
|
+
}
|
|
72
|
+
let matrixArray = cssMatrix.match(/^matrix.*\((.*)\)/)[1].split(',').map(Number);
|
|
73
|
+
return matrixArray;
|
|
74
|
+
}
|
|
75
|
+
export function getRotationAngleFromMatrix(matrixArray, domMatrix) {
|
|
76
|
+
let angle = null;
|
|
77
|
+
const a = domMatrix != null ? domMatrix.a : matrixArray[0];
|
|
78
|
+
const b = domMatrix != null ? domMatrix.b : matrixArray[1];
|
|
79
|
+
angle = Math.round(Math.atan2(b, a) * (180 / Math.PI));
|
|
80
|
+
return angle;
|
|
81
|
+
}
|
|
82
|
+
export function addVectors(vectorA, vectorB) {
|
|
83
|
+
return [vectorA[0] + vectorB[0], vectorA[1] + vectorB[1]];
|
|
84
|
+
}
|
|
85
|
+
export function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element, designerCanvas) {
|
|
86
|
+
const top0 = new DOMPointReadOnly(-parseInt(getComputedStyle(element).transformOrigin.split(' ')[0]), -parseInt(getComputedStyle(element).transformOrigin.split(' ')[1]), 0, 0);
|
|
87
|
+
const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element);
|
|
88
|
+
const transformOriginAbsolutRelatedToWindowWithoutAnyTransformation = new DOMPoint(p0Offsets.offsetLeft - top0.x, p0Offsets.offsetTop - top0.y);
|
|
89
|
+
const designerCanvasNormalizedTransformedOrigin = new DOMPoint(transformOriginAbsolutRelatedToWindowWithoutAnyTransformation.x - designerCanvas.containerBoundingRect.x, transformOriginAbsolutRelatedToWindowWithoutAnyTransformation.y - designerCanvas.containerBoundingRect.y);
|
|
90
|
+
return designerCanvasNormalizedTransformedOrigin;
|
|
91
|
+
}
|
|
92
|
+
export function getResultingTransformationBetweenElementAndAllAncestors(element, ancestor, excludeAncestor) {
|
|
93
|
+
let actualElement = element;
|
|
94
|
+
let actualElementMatrix;
|
|
95
|
+
let originalElementAndAllParentsMultipliedMatrix;
|
|
96
|
+
while (actualElement != ancestor) {
|
|
97
|
+
const newElement = getParentElementIncludingSlots(actualElement);
|
|
98
|
+
actualElementMatrix = new DOMMatrix(getComputedStyle(actualElement).transform);
|
|
99
|
+
if (actualElement == element) {
|
|
100
|
+
originalElementAndAllParentsMultipliedMatrix = actualElementMatrix.multiply(new DOMMatrix(getComputedStyle(newElement).transform));
|
|
101
|
+
}
|
|
102
|
+
else if (newElement != ancestor || !excludeAncestor) {
|
|
103
|
+
originalElementAndAllParentsMultipliedMatrix = originalElementAndAllParentsMultipliedMatrix.multiply(new DOMMatrix(getComputedStyle(newElement).transform));
|
|
104
|
+
}
|
|
105
|
+
actualElement = newElement;
|
|
106
|
+
}
|
|
107
|
+
return originalElementAndAllParentsMultipliedMatrix;
|
|
108
|
+
}
|
|
109
|
+
export function getByParentsTransformedPointRelatedToCanvas(element, point, designerCanvas) {
|
|
110
|
+
const canvas = element.closest('#node-projects-designer-canvas-canvas');
|
|
111
|
+
let actualElement = element;
|
|
112
|
+
let parentElementTransformOriginToPointVectorTransformed;
|
|
113
|
+
let byParentTransformedPointRelatedToCanvas = { x: 0, y: 0 };
|
|
114
|
+
while (actualElement != canvas) {
|
|
115
|
+
const parentElement = getParentElementIncludingSlots(actualElement);
|
|
116
|
+
const parentElementTransformOrigin = new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetLeft - designerCanvas.outerRect.x + parseInt(getComputedStyle(parentElement).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetTop - designerCanvas.outerRect.y + parseInt(getComputedStyle(parentElement).transformOrigin.split(' ')[1]));
|
|
117
|
+
parentElementTransformOrigin.x -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).x;
|
|
118
|
+
parentElementTransformOrigin.y -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).y;
|
|
119
|
+
const parentElementTransformOriginToPointVector = new DOMPointReadOnly(-parentElementTransformOrigin.x + (element == actualElement ? point.x : byParentTransformedPointRelatedToCanvas.x), -parentElementTransformOrigin.y + (element == actualElement ? point.y : byParentTransformedPointRelatedToCanvas.y));
|
|
120
|
+
parentElementTransformOriginToPointVectorTransformed = parentElementTransformOriginToPointVector.matrixTransform(new DOMMatrix(getComputedStyle(parentElement).transform));
|
|
121
|
+
byParentTransformedPointRelatedToCanvas = new DOMPoint(parentElementTransformOrigin.x + parentElementTransformOriginToPointVectorTransformed.x, parentElementTransformOrigin.y + parentElementTransformOriginToPointVectorTransformed.y);
|
|
122
|
+
actualElement = parentElement;
|
|
123
|
+
}
|
|
124
|
+
return byParentTransformedPointRelatedToCanvas;
|
|
125
|
+
}
|
|
126
|
+
export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas) {
|
|
127
|
+
const topleft = 0;
|
|
128
|
+
const topright = 1;
|
|
129
|
+
const bottomleft = 2;
|
|
130
|
+
const bottomright = 3;
|
|
131
|
+
const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element);
|
|
132
|
+
const p0OffsetsRelatedToCanvas = DOMPoint.fromPoint({
|
|
133
|
+
x: p0Offsets.offsetLeft - designerCanvas.containerBoundingRect.left,
|
|
134
|
+
y: p0Offsets.offsetTop - designerCanvas.containerBoundingRect.top
|
|
135
|
+
});
|
|
136
|
+
let width = parseInt(getComputedStyle(element).width.replace('px', ''));
|
|
137
|
+
let height = parseInt(getComputedStyle(element).height.replace('px', ''));
|
|
138
|
+
if (getComputedStyle(element).boxSizing == 'content-box') {
|
|
139
|
+
width += parseInt(getComputedStyle(element).paddingLeft.replace('px', ''))
|
|
140
|
+
+ parseInt(getComputedStyle(element).marginLeft.replace('px', ''))
|
|
141
|
+
+ parseInt(getComputedStyle(element).borderLeft.replace('px', ''))
|
|
142
|
+
+ parseInt(getComputedStyle(element).paddingRight.replace('px', ''))
|
|
143
|
+
+ parseInt(getComputedStyle(element).marginRight.replace('px', ''))
|
|
144
|
+
+ parseInt(getComputedStyle(element).borderRight.replace('px', ''));
|
|
145
|
+
height += parseInt(getComputedStyle(element).paddingTop.replace('px', ''))
|
|
146
|
+
+ parseInt(getComputedStyle(element).marginTop.replace('px', ''))
|
|
147
|
+
+ parseInt(getComputedStyle(element).borderTop.replace('px', ''))
|
|
148
|
+
+ parseInt(getComputedStyle(element).paddingBottom.replace('px', ''))
|
|
149
|
+
+ parseInt(getComputedStyle(element).marginBottom.replace('px', ''))
|
|
150
|
+
+ parseInt(getComputedStyle(element).borderBottom.replace('px', ''));
|
|
151
|
+
}
|
|
152
|
+
const elementWithoutTransformCornerDOMPoints = [];
|
|
153
|
+
elementWithoutTransformCornerDOMPoints[topleft] = DOMPoint.fromPoint({
|
|
154
|
+
x: p0OffsetsRelatedToCanvas.x - untransformedCornerPointsOffset,
|
|
155
|
+
y: p0OffsetsRelatedToCanvas.y - untransformedCornerPointsOffset
|
|
156
|
+
});
|
|
157
|
+
elementWithoutTransformCornerDOMPoints[topright] = DOMPoint.fromPoint({
|
|
158
|
+
x: p0OffsetsRelatedToCanvas.x + width + untransformedCornerPointsOffset,
|
|
159
|
+
y: p0OffsetsRelatedToCanvas.y - untransformedCornerPointsOffset
|
|
160
|
+
});
|
|
161
|
+
elementWithoutTransformCornerDOMPoints[bottomleft] = DOMPoint.fromPoint({
|
|
162
|
+
x: p0OffsetsRelatedToCanvas.x - untransformedCornerPointsOffset,
|
|
163
|
+
y: p0OffsetsRelatedToCanvas.y + height + untransformedCornerPointsOffset
|
|
164
|
+
});
|
|
165
|
+
elementWithoutTransformCornerDOMPoints[bottomright] = DOMPoint.fromPoint({
|
|
166
|
+
x: p0OffsetsRelatedToCanvas.x + width + untransformedCornerPointsOffset,
|
|
167
|
+
y: p0OffsetsRelatedToCanvas.y + height + untransformedCornerPointsOffset
|
|
168
|
+
});
|
|
169
|
+
const transformOriginWithoutTransformRelatedToCanvas = DOMPointReadOnly.fromPoint({
|
|
170
|
+
x: p0OffsetsRelatedToCanvas.x + parseInt(getComputedStyle(element).transformOrigin.split(' ')[0]),
|
|
171
|
+
y: p0OffsetsRelatedToCanvas.y + parseInt(getComputedStyle(element).transformOrigin.split(' ')[1]),
|
|
172
|
+
z: 0,
|
|
173
|
+
w: 0
|
|
174
|
+
});
|
|
175
|
+
const designerCanvasNormalizedTransformOrigin = getByParentsTransformedPointRelatedToCanvas(element, new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetLeft - designerCanvas.outerRect.left + parseInt(getComputedStyle(element).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetTop - designerCanvas.outerRect.top + parseInt(getComputedStyle(element).transformOrigin.split(' ')[1])), designerCanvas);
|
|
176
|
+
let top0 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topleft].y));
|
|
177
|
+
let top1 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topright].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topright].y));
|
|
178
|
+
let top2 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[bottomleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[bottomleft].y));
|
|
179
|
+
let top3 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[bottomright].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[bottomright].y));
|
|
180
|
+
let originalElementAndAllParentsMultipliedMatrix = getResultingTransformationBetweenElementAndAllAncestors(element, designerCanvas.canvas, true);
|
|
181
|
+
let top0Transformed = top0.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
|
|
182
|
+
let top1Transformed = top1.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
|
|
183
|
+
let top2Transformed = top2.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
|
|
184
|
+
let top3Transformed = top3.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
|
|
185
|
+
let transformedCornerPoints = [];
|
|
186
|
+
transformedCornerPoints[0] = new DOMPoint(designerCanvasNormalizedTransformOrigin.x + top0Transformed.x, designerCanvasNormalizedTransformOrigin.y + top0Transformed.y);
|
|
187
|
+
transformedCornerPoints[1] = new DOMPoint(designerCanvasNormalizedTransformOrigin.x + top1Transformed.x, designerCanvasNormalizedTransformOrigin.y + top1Transformed.y);
|
|
188
|
+
transformedCornerPoints[2] = new DOMPoint(designerCanvasNormalizedTransformOrigin.x + top2Transformed.x, designerCanvasNormalizedTransformOrigin.y + top2Transformed.y);
|
|
189
|
+
transformedCornerPoints[3] = new DOMPoint(designerCanvasNormalizedTransformOrigin.x + top3Transformed.x, designerCanvasNormalizedTransformOrigin.y + top3Transformed.y);
|
|
190
|
+
return transformedCornerPoints;
|
|
191
|
+
}
|
|
192
|
+
export function extractTranslationFromDOMMatrix(matrix) {
|
|
193
|
+
return new DOMPoint(matrix.m41, matrix.m42, 0, 0);
|
|
194
|
+
}
|
|
195
|
+
export function extractRotationAngleFromDOMMatrix(matrix) {
|
|
196
|
+
return getRotationAngleFromMatrix(null, matrix);
|
|
197
|
+
}
|
|
198
|
+
export function normalizeToAbsolutePosition(element, normalizeProperty) {
|
|
199
|
+
switch (normalizeProperty) {
|
|
200
|
+
case "left":
|
|
201
|
+
let left = getComputedStyle(element).left;
|
|
202
|
+
element.style.removeProperty('right');
|
|
203
|
+
element.style.left = left;
|
|
204
|
+
return left;
|
|
205
|
+
case "top":
|
|
206
|
+
let top = getComputedStyle(element).top;
|
|
207
|
+
element.style.removeProperty('bottom');
|
|
208
|
+
element.style.top = top;
|
|
209
|
+
return top;
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
21
212
|
}
|
|
@@ -69,6 +69,9 @@ import { LineExtensionProvider } from '../widgets/designerView/extensions/svg/Li
|
|
|
69
69
|
import { RectExtentionProvider } from '../widgets/designerView/extensions/svg/RectExtensionProvider.js';
|
|
70
70
|
import { EllipsisExtensionProvider } from '../widgets/designerView/extensions/svg/EllipsisExtensionProvider.js';
|
|
71
71
|
import { PropertyGroupsService } from './propertiesService/PropertyGroupsService.js';
|
|
72
|
+
import { PlacementExtensionProvider } from '../widgets/designerView/extensions/PlacementExtensionProvider.js';
|
|
73
|
+
import { FlexboxExtensionProvider } from '../widgets/designerView/extensions/FlexboxExtensionProvider.js';
|
|
74
|
+
import { FlexboxExtensionDesignViewConfigButtons } from '../widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js';
|
|
72
75
|
export function createDefaultServiceContainer() {
|
|
73
76
|
let serviceContainer = new ServiceContainer();
|
|
74
77
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -99,6 +102,7 @@ export function createDefaultServiceContainer() {
|
|
|
99
102
|
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
|
|
100
103
|
new ElementDragTitleExtensionProvider(),
|
|
101
104
|
new GridExtensionProvider(),
|
|
105
|
+
new FlexboxExtensionProvider(),
|
|
102
106
|
new TransformOriginExtensionProvider(),
|
|
103
107
|
new CanvasExtensionProvider(),
|
|
104
108
|
new PositionExtensionProvider(),
|
|
@@ -113,11 +117,15 @@ export function createDefaultServiceContainer() {
|
|
|
113
117
|
new SelectionDefaultExtensionProvider()
|
|
114
118
|
]);
|
|
115
119
|
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelectionContainer, [
|
|
116
|
-
new GridExtensionProvider()
|
|
120
|
+
new GridExtensionProvider(),
|
|
121
|
+
new FlexboxExtensionProvider()
|
|
117
122
|
]);
|
|
118
123
|
serviceContainer.designerExtensions.set(ExtensionType.MouseOver, [
|
|
119
124
|
new MouseOverExtensionProvider()
|
|
120
125
|
]);
|
|
126
|
+
serviceContainer.designerExtensions.set(ExtensionType.Placement, [
|
|
127
|
+
new PlacementExtensionProvider()
|
|
128
|
+
]);
|
|
121
129
|
serviceContainer.designerExtensions.set(ExtensionType.ContainerDrag, [
|
|
122
130
|
new GrayOutExtensionProvider()
|
|
123
131
|
]);
|
|
@@ -146,7 +154,7 @@ export function createDefaultServiceContainer() {
|
|
|
146
154
|
serviceContainer.designerPointerExtensions.push(
|
|
147
155
|
//new CursorLinePointerExtensionProvider()
|
|
148
156
|
);
|
|
149
|
-
serviceContainer.designViewConfigButtons.push(new ButtonSeperatorProvider(20), new GridExtensionDesignViewConfigButtons());
|
|
157
|
+
serviceContainer.designViewConfigButtons.push(new ButtonSeperatorProvider(20), new GridExtensionDesignViewConfigButtons(), new FlexboxExtensionDesignViewConfigButtons());
|
|
150
158
|
serviceContainer.designViewToolbarButtons.push(new PointerToolButtonProvider(), new SeperatorToolProvider(22), new SelectorToolButtonProvider(), new SeperatorToolProvider(22), new ZoomToolButtonProvider(), new SeperatorToolProvider(22), new DrawToolButtonProvider(), new SeperatorToolProvider(5), new TextToolButtonProvider());
|
|
151
159
|
serviceContainer.designerContextMenuExtensions = [
|
|
152
160
|
new CopyPasteContextMenu(),
|
|
@@ -10,6 +10,7 @@ export declare class DefaultPlacementService implements IPlacementService {
|
|
|
10
10
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
11
11
|
private calculateTrack;
|
|
12
12
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
13
|
+
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
13
14
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
14
15
|
enterContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
15
16
|
leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DomConverter } from '../../widgets/designerView/DomConverter.js';
|
|
2
|
-
import { combineTransforms } from '../../helper/TransformHelper.js';
|
|
2
|
+
import { combineTransforms, extractTranslationFromDOMMatrix, getResultingTransformationBetweenElementAndAllAncestors } from '../../helper/TransformHelper.js';
|
|
3
3
|
import { filterChildPlaceItems, placeDesignItem } from '../../helper/LayoutHelper.js';
|
|
4
|
+
import { ExtensionType } from '../../widgets/designerView/extensions/ExtensionType.js';
|
|
4
5
|
export class DefaultPlacementService {
|
|
5
6
|
serviceForContainer(container, containerStyle) {
|
|
6
7
|
if (containerStyle.display === 'grid' || containerStyle.display === 'inline-grid' ||
|
|
@@ -83,15 +84,25 @@ export class DefaultPlacementService {
|
|
|
83
84
|
}
|
|
84
85
|
return { x: trackX, y: trackY };
|
|
85
86
|
}
|
|
87
|
+
startPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
88
|
+
}
|
|
86
89
|
place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
87
90
|
//TODO:, this should revert all undo actions while active
|
|
88
91
|
//maybe a undo actions returns itself or an id so it could be changed?
|
|
89
92
|
let track = this.calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, items[0]);
|
|
90
|
-
let
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
let filteredItems = filterChildPlaceItems(items);
|
|
94
|
+
for (const designItem of filteredItems) {
|
|
95
|
+
const canvas = designItem.element.closest('#node-projects-designer-canvas-canvas');
|
|
96
|
+
let originalElementAndAllAncestorsMultipliedMatrix = getResultingTransformationBetweenElementAndAllAncestors(designItem.element.parentElement, canvas, true);
|
|
97
|
+
let transformMatrixParentTransformsCompensated = null;
|
|
98
|
+
if (originalElementAndAllAncestorsMultipliedMatrix) {
|
|
99
|
+
transformMatrixParentTransformsCompensated = new DOMPoint(track.x, track.y, 0, 0).matrixTransform(originalElementAndAllAncestorsMultipliedMatrix.inverse());
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
transformMatrixParentTransformsCompensated = new DOMPoint(track.x, track.y, 0, 0);
|
|
103
|
+
}
|
|
104
|
+
const translationMatrix = new DOMMatrix().translate(transformMatrixParentTransformsCompensated.x, transformMatrixParentTransformsCompensated.y);
|
|
105
|
+
combineTransforms(designItem.element, designItem.styles.get('transform'), translationMatrix.toString());
|
|
95
106
|
}
|
|
96
107
|
}
|
|
97
108
|
enterContainer(container, items) {
|
|
@@ -108,11 +119,16 @@ export class DefaultPlacementService {
|
|
|
108
119
|
leaveContainer(container, items) {
|
|
109
120
|
}
|
|
110
121
|
finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
111
|
-
let track = this.calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, items[0]);
|
|
112
122
|
let filterdItems = filterChildPlaceItems(items);
|
|
113
123
|
for (const designItem of filterdItems) {
|
|
124
|
+
let translation = extractTranslationFromDOMMatrix(new DOMMatrix(designItem.element.style.transform));
|
|
125
|
+
const stylesMapOffset = extractTranslationFromDOMMatrix(new DOMMatrix(designItem.styles.get('transform') ?? ''));
|
|
114
126
|
designItem.element.style.transform = designItem.styles.get('transform') ?? '';
|
|
115
|
-
|
|
127
|
+
let track = { x: translation.x, y: translation.y };
|
|
128
|
+
placeDesignItem(container, designItem, { x: track.x - stylesMapOffset.x, y: track.y - stylesMapOffset.y }, 'position');
|
|
129
|
+
}
|
|
130
|
+
for (const item of items) {
|
|
131
|
+
placementView.extensionManager.removeExtension(item, ExtensionType.Placement);
|
|
116
132
|
}
|
|
117
133
|
}
|
|
118
134
|
}
|
|
@@ -11,6 +11,7 @@ export declare class FlexBoxPlacementService implements IPlacementService {
|
|
|
11
11
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
12
12
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
13
13
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
14
|
+
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
14
15
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
15
16
|
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
16
17
|
}
|
|
@@ -38,6 +38,8 @@ export class FlexBoxPlacementService {
|
|
|
38
38
|
const defaultPlacementService = container.serviceContainer.getLastServiceWhere('containerService', x => x instanceof DefaultPlacementService);
|
|
39
39
|
return defaultPlacementService.placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items);
|
|
40
40
|
}
|
|
41
|
+
startPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
42
|
+
}
|
|
41
43
|
place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
42
44
|
const pos = placementView.getNormalizedEventCoordinates(event);
|
|
43
45
|
const style = getComputedStyle(container.element);
|
|
@@ -11,6 +11,7 @@ export declare class GridPlacementService implements IPlacementService {
|
|
|
11
11
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
12
12
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
13
13
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
14
|
+
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
14
15
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
15
16
|
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
16
17
|
}
|
|
@@ -42,6 +42,8 @@ export class GridPlacementService {
|
|
|
42
42
|
const defaultPlacementService = container.serviceContainer.getLastServiceWhere('containerService', x => x instanceof DefaultPlacementService);
|
|
43
43
|
return defaultPlacementService.placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items);
|
|
44
44
|
}
|
|
45
|
+
startPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
46
|
+
}
|
|
45
47
|
place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
|
|
46
48
|
const gridInformation = CalculateGridInformation(container);
|
|
47
49
|
const pos = placementView.getNormalizedEventCoordinates(event);
|
|
@@ -11,6 +11,7 @@ export interface IPlacementService extends IService {
|
|
|
11
11
|
leaveContainer(container: IDesignItem, items: IDesignItem[]): any;
|
|
12
12
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
13
13
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
14
|
+
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
|
|
14
15
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
|
|
15
16
|
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
|
|
16
17
|
}
|
|
@@ -26,8 +26,11 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
|
|
|
26
26
|
readonly alignOnSnap: boolean;
|
|
27
27
|
readonly onContentChanged: TypedEvent<void>;
|
|
28
28
|
zoomFactor: number;
|
|
29
|
+
designerOffsetWidth: number;
|
|
30
|
+
designerOffsetHeight: number;
|
|
29
31
|
readonly scaleFactor: number;
|
|
30
32
|
canvasOffset: IPoint;
|
|
33
|
+
canvas: HTMLElement;
|
|
31
34
|
eatEvents: Element;
|
|
32
35
|
initialize(serviceContainer: ServiceContainer): any;
|
|
33
36
|
getNormalizedEventCoordinates(event: MouseEvent): IPoint;
|
|
@@ -37,6 +40,7 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
|
|
|
37
40
|
realWidth: number;
|
|
38
41
|
realHeight: number;
|
|
39
42
|
};
|
|
43
|
+
getNormalizedElementCoordinates(element: Element, ignoreScalefactor?: boolean): IRect;
|
|
40
44
|
captureActiveTool(tool: ITool): any;
|
|
41
45
|
releaseActiveTool(): any;
|
|
42
46
|
getDesignSurfaceDimensions(): ISize;
|
|
@@ -29,7 +29,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
29
29
|
overlayLayer: OverlayLayerView;
|
|
30
30
|
rootDesignItem: IDesignItem;
|
|
31
31
|
eatEvents: Element;
|
|
32
|
-
transformHelperElement: HTMLDivElement;
|
|
33
32
|
private _zoomFactor;
|
|
34
33
|
private _scaleFactor;
|
|
35
34
|
private _canvasOffset;
|
|
@@ -44,6 +43,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
44
43
|
set canvasOffsetUnzoomed(value: IPoint);
|
|
45
44
|
onContentChanged: TypedEvent<void>;
|
|
46
45
|
onZoomFactorChanged: TypedEvent<number>;
|
|
46
|
+
get canvas(): HTMLElement;
|
|
47
47
|
private _canvas;
|
|
48
48
|
private _canvasContainer;
|
|
49
49
|
private _outercanvas2;
|
|
@@ -100,7 +100,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
100
100
|
* Converts the Event x/y coordinates, to the mouse position in the viewport
|
|
101
101
|
*/
|
|
102
102
|
getViewportCoordinates(event: MouseEvent): IPoint;
|
|
103
|
-
getNormalizedElementCoordinates(element: Element): IRect;
|
|
103
|
+
getNormalizedElementCoordinates(element: Element, ignoreScalefactor?: boolean): IRect;
|
|
104
104
|
getNormalizedElementCoordinatesAndRealSizes(element: Element): IRect & {
|
|
105
105
|
realWidth: number;
|
|
106
106
|
realHeight: number;
|
|
@@ -36,7 +36,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
36
36
|
overlayLayer;
|
|
37
37
|
rootDesignItem;
|
|
38
38
|
eatEvents;
|
|
39
|
-
transformHelperElement;
|
|
40
39
|
_zoomFactor = 1; //if scale or zoom css property is used this needs to be the value
|
|
41
40
|
_scaleFactor = 1; //if scale css property is used this need to be the scale value
|
|
42
41
|
_canvasOffset = { x: 0, y: 0 };
|
|
@@ -67,6 +66,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
67
66
|
}
|
|
68
67
|
onContentChanged = new TypedEvent();
|
|
69
68
|
onZoomFactorChanged = new TypedEvent();
|
|
69
|
+
get canvas() {
|
|
70
|
+
return this._canvas;
|
|
71
|
+
}
|
|
70
72
|
// Private Variables
|
|
71
73
|
_canvas;
|
|
72
74
|
_canvasContainer;
|
|
@@ -103,6 +105,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
103
105
|
width: 100%;
|
|
104
106
|
height: 100%;
|
|
105
107
|
transform-origin: 0 0;
|
|
108
|
+
position: relative;
|
|
106
109
|
}
|
|
107
110
|
|
|
108
111
|
#node-projects-designer-canvas-canvas.dragFileActive {
|
|
@@ -136,11 +139,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
136
139
|
height: 100%;
|
|
137
140
|
top: 0;
|
|
138
141
|
}
|
|
139
|
-
|
|
140
|
-
#node-projects-designer-canvas-
|
|
142
|
+
|
|
143
|
+
#node-projects-designer-canvas-helper-element {
|
|
141
144
|
height: 0;
|
|
142
145
|
width: 0;
|
|
143
|
-
}
|
|
146
|
+
}
|
|
147
|
+
`;
|
|
144
148
|
static template = html `
|
|
145
149
|
<div style="display: flex;flex-direction: column;width: 100%;height: 100%;">
|
|
146
150
|
<div style="width: 100%;height: 100%;">
|
|
@@ -152,7 +156,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
152
156
|
</div>
|
|
153
157
|
<div id="node-projects-designer-canvas-clickOverlay" tabindex="0" style="pointer-events: auto;"></div>
|
|
154
158
|
</div>
|
|
155
|
-
<div id="node-projects-designer-canvas-transformHelper"></div>
|
|
156
159
|
</div>`;
|
|
157
160
|
extensionManager;
|
|
158
161
|
_pointerextensions;
|
|
@@ -164,7 +167,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
164
167
|
this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
|
|
165
168
|
this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
|
|
166
169
|
this.clickOverlay = this._getDomElement('node-projects-designer-canvas-clickOverlay');
|
|
167
|
-
this.transformHelperElement = this._getDomElement('node-projects-designer-canvas-transformHelper');
|
|
168
170
|
this._onKeyDownBound = this.onKeyDown.bind(this);
|
|
169
171
|
this._onKeyUpBound = this.onKeyUp.bind(this);
|
|
170
172
|
this._onDblClickBound = this._onDblClick.bind(this);
|
|
@@ -768,9 +770,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
768
770
|
y: (event.clientY - this.outerRect.y)
|
|
769
771
|
};
|
|
770
772
|
}
|
|
771
|
-
getNormalizedElementCoordinates(element) {
|
|
773
|
+
getNormalizedElementCoordinates(element, ignoreScalefactor) {
|
|
772
774
|
const targetRect = element.getBoundingClientRect();
|
|
773
|
-
return { x: (targetRect.x - this.containerBoundingRect.x) / this.scaleFactor, y: (targetRect.y - this.containerBoundingRect.y) / this.scaleFactor, width: targetRect.width / this.scaleFactor, height: targetRect.height / this.scaleFactor };
|
|
775
|
+
return { x: (targetRect.x - this.containerBoundingRect.x) / (ignoreScalefactor ? 1 : this.scaleFactor), y: (targetRect.y - this.containerBoundingRect.y) / (ignoreScalefactor ? 1 : this.scaleFactor), width: targetRect.width / (ignoreScalefactor ? 1 : this.scaleFactor), height: targetRect.height / (ignoreScalefactor ? 1 : this.scaleFactor) };
|
|
774
776
|
}
|
|
775
777
|
getNormalizedElementCoordinatesAndRealSizes(element) {
|
|
776
778
|
let ret = this.getNormalizedElementCoordinates(element);
|
|
@@ -2,6 +2,7 @@ import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
|
2
2
|
import { IExtensionManager } from "./IExtensionManger";
|
|
3
3
|
import { OverlayLayerView } from '../overlayLayerView';
|
|
4
4
|
import { OverlayLayer } from './OverlayLayer';
|
|
5
|
+
import { IPoint } from "../../../../interfaces/IPoint";
|
|
5
6
|
export declare abstract class AbstractExtensionBase {
|
|
6
7
|
protected overlays: SVGElement[];
|
|
7
8
|
protected overlayLayerView: OverlayLayerView;
|
|
@@ -14,4 +15,5 @@ export declare abstract class AbstractExtensionBase {
|
|
|
14
15
|
protected _drawRect(x: number, y: number, w: number, h: number, className?: string, rect?: SVGRectElement, overlayLayer?: OverlayLayer): SVGRectElement;
|
|
15
16
|
protected _drawText(text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
|
|
16
17
|
protected _drawTextWithBackground(text: string, x: number, y: number, backgroundColor: string, className?: string, existingEls?: [SVGFilterElement, SVGFEFloodElement, SVGTextElement, SVGTextElement], overlayLayer?: OverlayLayer): [SVGFilterElement, SVGFEFloodElement, SVGTextElement, SVGTextElement];
|
|
18
|
+
protected _drawTransformedRect(points: [IPoint, IPoint, IPoint, IPoint], className?: string, path?: SVGPathElement, overlayLayer?: OverlayLayer): SVGPathElement;
|
|
17
19
|
}
|
|
@@ -54,4 +54,12 @@ export class AbstractExtensionBase {
|
|
|
54
54
|
}
|
|
55
55
|
return newEls;
|
|
56
56
|
}
|
|
57
|
+
_drawTransformedRect(points, className, path, overlayLayer) {
|
|
58
|
+
let data = "M" + points[0].x + " " + points[0].y + " L" + points[1].x + " " + points[1].y + " L" + points[3].x + " " + points[3].y + " L" + points[2].x + " " + points[2].y + "Z";
|
|
59
|
+
const newPath = this.overlayLayerView.drawPath(data, className, path, overlayLayer);
|
|
60
|
+
if (!path) {
|
|
61
|
+
this.overlays.push(newPath);
|
|
62
|
+
}
|
|
63
|
+
return newPath;
|
|
64
|
+
}
|
|
57
65
|
}
|