@node-projects/web-component-designer 0.0.154 → 0.0.156
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.js +31 -6
- package/dist/elements/helper/SvgHelper.d.ts +1 -0
- package/dist/elements/helper/SvgHelper.js +13 -0
- package/dist/elements/helper/TransformHelper.d.ts +5 -1
- package/dist/elements/helper/TransformHelper.js +35 -27
- package/dist/elements/helper/contextMenu/ContextMenu.js +9 -1
- package/dist/elements/item/DesignItem.d.ts +12 -2
- package/dist/elements/item/DesignItem.js +55 -20
- package/dist/elements/item/IDesignItem.d.ts +10 -2
- package/dist/elements/services/bindingsService/BaseCustomWebcomponentBindingsService.js +1 -1
- package/dist/elements/services/htmlParserService/DefaultHtmlParserService.d.ts +1 -1
- package/dist/elements/services/htmlParserService/DefaultHtmlParserService.js +3 -3
- package/dist/elements/services/htmlParserService/LitElementParserService.js +2 -2
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.js +2 -2
- package/dist/elements/services/htmlWriterService/AbstractHtmlWriterService.js +3 -3
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +3 -3
- package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService.js +3 -3
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.d.ts +2 -2
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +3 -2
- package/dist/elements/services/modelCommandService/DefaultModelCommandService.js +6 -4
- package/dist/elements/services/placementService/DefaultPlacementService.js +5 -5
- package/dist/elements/services/propertiesService/IPropertiesService.d.ts +6 -1
- package/dist/elements/services/propertiesService/IPropertiesService.js +6 -1
- package/dist/elements/services/propertiesService/IProperty.d.ts +1 -0
- package/dist/elements/services/propertiesService/propertyEditors/BasePropertyEditor.js +4 -4
- package/dist/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.d.ts +2 -1
- package/dist/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.js +3 -2
- package/dist/elements/services/propertiesService/services/AbstractPropertiesService.d.ts +3 -3
- package/dist/elements/services/propertiesService/services/AbstractPropertiesService.js +16 -20
- package/dist/elements/services/propertiesService/services/AttributesPropertiesService.d.ts +3 -3
- package/dist/elements/services/propertiesService/services/AttributesPropertiesService.js +10 -11
- package/dist/elements/services/propertiesService/services/CommonPropertiesService.d.ts +2 -1
- package/dist/elements/services/propertiesService/services/CommonPropertiesService.js +3 -2
- package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +2 -1
- package/dist/elements/services/propertiesService/services/CssPropertiesService.js +4 -3
- package/dist/elements/services/propertiesService/services/ListPropertiesService.d.ts +2 -1
- package/dist/elements/services/propertiesService/services/ListPropertiesService.js +3 -2
- package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.d.ts +2 -1
- package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.js +3 -2
- package/dist/elements/services/propertiesService/services/WebcomponentManifestPropertiesService.d.ts +2 -2
- package/dist/elements/services/propertiesService/services/WebcomponentManifestPropertiesService.js +3 -2
- package/dist/elements/services/selectionService/SelectionService.d.ts +4 -0
- package/dist/elements/services/selectionService/SelectionService.js +11 -0
- package/dist/elements/services/undoService/UndoService.d.ts +1 -1
- package/dist/elements/services/undoService/transactionItems/AttributeChangeAction.js +4 -4
- package/dist/elements/services/undoService/transactionItems/CssStyleChangeAction.js +4 -4
- package/dist/elements/services/undoService/transactionItems/InsertAction.d.ts +2 -2
- package/dist/elements/services/undoService/transactionItems/InsertAction.js +5 -5
- package/dist/elements/services/undoService/transactionItems/SelectionChangedAction.d.ts +14 -0
- package/dist/elements/services/undoService/transactionItems/SelectionChangedAction.js +28 -0
- package/dist/elements/widgets/codeView/code-view-monaco.js +21 -1
- package/dist/elements/widgets/designerView/designerCanvas.js +8 -4
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +36 -31
- package/dist/elements/widgets/designerView/extensions/RotateExtensionProvider.js +3 -0
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +2 -2
- package/dist/elements/widgets/designerView/extensions/svg/EllipsisExtensionProvider.js +2 -1
- package/dist/elements/widgets/designerView/extensions/svg/LineExtensionProvider.js +3 -1
- package/dist/elements/widgets/designerView/extensions/svg/PathExtensionProvider.js +3 -1
- package/dist/elements/widgets/designerView/extensions/svg/RectExtensionProvider.js +3 -1
- package/dist/elements/widgets/propertyGrid/PropertyGrid.js +5 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.d.ts +1 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.js +34 -7
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/package.json +4 -4
|
@@ -11,12 +11,18 @@ export var ElementDisplayType;
|
|
|
11
11
|
ElementDisplayType[ElementDisplayType["block"] = 2] = "block";
|
|
12
12
|
})(ElementDisplayType || (ElementDisplayType = {}));
|
|
13
13
|
export function isInline(element) {
|
|
14
|
+
if (element instanceof SVGElement)
|
|
15
|
+
return false;
|
|
14
16
|
return element != null && window.getComputedStyle(element).display.startsWith('inline');
|
|
15
17
|
}
|
|
16
18
|
export function isInlineAfter(element) {
|
|
17
|
-
|
|
19
|
+
if (element instanceof SVGElement)
|
|
20
|
+
return false;
|
|
21
|
+
return element != null && window.getComputedStyle(element).display.startsWith('inline');
|
|
18
22
|
}
|
|
19
23
|
export function getElementDisplaytype(element) {
|
|
24
|
+
if (element instanceof SVGElement)
|
|
25
|
+
return ElementDisplayType.block;
|
|
20
26
|
const display = window.getComputedStyle(element).display;
|
|
21
27
|
return display == 'none' ? ElementDisplayType.none : display.startsWith('inline') ? ElementDisplayType.inline : ElementDisplayType.block;
|
|
22
28
|
}
|
|
@@ -44,12 +50,31 @@ export function getParentElementIncludingSlots(element) {
|
|
|
44
50
|
return element.parentElement;
|
|
45
51
|
}
|
|
46
52
|
export function getElementsWindowOffsetWithoutSelfAndParentTransformations(element) {
|
|
47
|
-
|
|
48
|
-
|
|
53
|
+
let offsetLeft = 0;
|
|
54
|
+
let offsetTop = 0;
|
|
49
55
|
while (element) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
56
|
+
if (element instanceof SVGSVGElement) {
|
|
57
|
+
//todo - fix without transformation
|
|
58
|
+
let t = element.style.transform;
|
|
59
|
+
element.style.transform = '';
|
|
60
|
+
const bcEl = element.getBoundingClientRect();
|
|
61
|
+
const bcPar = element.parentElement.getBoundingClientRect();
|
|
62
|
+
element.style.transform = t;
|
|
63
|
+
offsetLeft += bcEl.left - bcPar.left;
|
|
64
|
+
offsetTop += bcEl.top - bcPar.top;
|
|
65
|
+
element = element.parentElement;
|
|
66
|
+
}
|
|
67
|
+
else if (element instanceof SVGGraphicsElement) {
|
|
68
|
+
let bbox = element.getBBox();
|
|
69
|
+
offsetLeft += bbox.x;
|
|
70
|
+
offsetTop += bbox.y;
|
|
71
|
+
element = element.ownerSVGElement;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
offsetLeft += element.offsetLeft;
|
|
75
|
+
offsetTop += element.offsetTop;
|
|
76
|
+
element = element.offsetParent;
|
|
77
|
+
}
|
|
53
78
|
}
|
|
54
79
|
return { offsetLeft: offsetLeft, offsetTop: offsetTop };
|
|
55
80
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isVisualSvgElement(element: SVGElement): boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function isVisualSvgElement(element) {
|
|
2
|
+
let el = element;
|
|
3
|
+
while (el) {
|
|
4
|
+
if (el instanceof SVGSVGElement)
|
|
5
|
+
return true;
|
|
6
|
+
if (el instanceof SVGDefsElement)
|
|
7
|
+
return false;
|
|
8
|
+
if (el instanceof SVGMetadataElement)
|
|
9
|
+
return false;
|
|
10
|
+
el = el.parentElement;
|
|
11
|
+
}
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
@@ -2,7 +2,7 @@ import { IPoint } from "../../interfaces/IPoint.js";
|
|
|
2
2
|
import { IDesignerCanvas } from "../widgets/designerView/IDesignerCanvas.js";
|
|
3
3
|
export declare function combineTransforms(element: HTMLElement, actualTransforms: string, requestedTransformation: string): void;
|
|
4
4
|
export declare function getDomMatrix(element: HTMLElement): DOMMatrix;
|
|
5
|
-
export declare function
|
|
5
|
+
export declare function transformPointByInverseMatrix(point: DOMPoint, matrix: DOMMatrix): DOMPoint;
|
|
6
6
|
export declare function getRotationMatrix3d(axisOfRotation: 'x' | 'y' | 'z' | 'X' | 'Y' | 'Z', angle: number): any[];
|
|
7
7
|
export declare function rotateElementByMatrix3d(element: HTMLElement, matrix: number[]): void;
|
|
8
8
|
export declare function matrixArrayToCssMatrix(matrixArray: number[]): string;
|
|
@@ -13,6 +13,10 @@ export declare function getDesignerCanvasNormalizedTransformedOriginWithoutParen
|
|
|
13
13
|
export declare function getResultingTransformationBetweenElementAndAllAncestors(element: HTMLElement, ancestor: HTMLElement, excludeAncestor?: boolean): DOMMatrix;
|
|
14
14
|
export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas): IPoint;
|
|
15
15
|
export declare function getDesignerCanvasNormalizedTransformedPoint(element: HTMLElement, point: IPoint, designerCanvas: IDesignerCanvas): IPoint;
|
|
16
|
+
export declare function getElementSize(element: HTMLElement): {
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
};
|
|
16
20
|
export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: IPoint | null, designerCanvas: IDesignerCanvas): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
|
|
17
21
|
export declare function extractTranslationFromDOMMatrix(matrix: DOMMatrix): DOMPoint;
|
|
18
22
|
export declare function extractRotationAngleFromDOMMatrix(matrix: DOMMatrix): number;
|
|
@@ -18,8 +18,12 @@ export function combineTransforms(element, actualTransforms, requestedTransforma
|
|
|
18
18
|
export function getDomMatrix(element) {
|
|
19
19
|
return new DOMMatrix(window.getComputedStyle(element).transform);
|
|
20
20
|
}
|
|
21
|
-
export function
|
|
22
|
-
|
|
21
|
+
export function transformPointByInverseMatrix(point, matrix) {
|
|
22
|
+
const inverse = matrix.inverse();
|
|
23
|
+
//fix chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1395645
|
|
24
|
+
inverse.m33 = 1;
|
|
25
|
+
inverse.m44 = 1;
|
|
26
|
+
return point.matrixTransform(inverse);
|
|
23
27
|
}
|
|
24
28
|
export function getRotationMatrix3d(axisOfRotation, angle) {
|
|
25
29
|
const angleInRadians = angle / 180 * Math.PI;
|
|
@@ -83,7 +87,7 @@ export function addVectors(vectorA, vectorB) {
|
|
|
83
87
|
return [vectorA[0] + vectorB[0], vectorA[1] + vectorB[1]];
|
|
84
88
|
}
|
|
85
89
|
export function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element, designerCanvas) {
|
|
86
|
-
const top0 = new DOMPointReadOnly(-
|
|
90
|
+
const top0 = new DOMPointReadOnly(-parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]), -parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1]), 0, 0);
|
|
87
91
|
const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element);
|
|
88
92
|
const transformOriginAbsolutRelatedToWindowWithoutAnyTransformation = new DOMPoint(p0Offsets.offsetLeft - top0.x, p0Offsets.offsetTop - top0.y);
|
|
89
93
|
const designerCanvasNormalizedTransformedOrigin = new DOMPoint(transformOriginAbsolutRelatedToWindowWithoutAnyTransformation.x - designerCanvas.containerBoundingRect.x, transformOriginAbsolutRelatedToWindowWithoutAnyTransformation.y - designerCanvas.containerBoundingRect.y);
|
|
@@ -92,15 +96,18 @@ export function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransfo
|
|
|
92
96
|
export function getResultingTransformationBetweenElementAndAllAncestors(element, ancestor, excludeAncestor) {
|
|
93
97
|
let actualElement = element;
|
|
94
98
|
let actualElementMatrix;
|
|
99
|
+
let newElementMatrix;
|
|
95
100
|
let originalElementAndAllParentsMultipliedMatrix;
|
|
96
101
|
while (actualElement != ancestor) {
|
|
97
102
|
const newElement = getParentElementIncludingSlots(actualElement);
|
|
98
103
|
actualElementMatrix = new DOMMatrix(getComputedStyle(actualElement).transform);
|
|
104
|
+
newElementMatrix = new DOMMatrix(getComputedStyle(newElement).transform);
|
|
105
|
+
newElementMatrix.m41 = newElementMatrix.m42 = 0;
|
|
99
106
|
if (actualElement == element) {
|
|
100
|
-
originalElementAndAllParentsMultipliedMatrix = actualElementMatrix.multiply(
|
|
107
|
+
originalElementAndAllParentsMultipliedMatrix = actualElementMatrix.multiply(newElementMatrix);
|
|
101
108
|
}
|
|
102
109
|
else if (newElement != ancestor || !excludeAncestor) {
|
|
103
|
-
originalElementAndAllParentsMultipliedMatrix = originalElementAndAllParentsMultipliedMatrix.multiply(
|
|
110
|
+
originalElementAndAllParentsMultipliedMatrix = originalElementAndAllParentsMultipliedMatrix.multiply(newElementMatrix);
|
|
104
111
|
}
|
|
105
112
|
actualElement = newElement;
|
|
106
113
|
}
|
|
@@ -113,9 +120,11 @@ export function getByParentsTransformedPointRelatedToCanvas(element, point, desi
|
|
|
113
120
|
let byParentTransformedPointRelatedToCanvas = { x: 0, y: 0 };
|
|
114
121
|
while (actualElement != canvas) {
|
|
115
122
|
const parentElement = getParentElementIncludingSlots(actualElement);
|
|
116
|
-
const parentElementTransformOrigin = new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetLeft - designerCanvas.outerRect.x +
|
|
117
|
-
|
|
118
|
-
|
|
123
|
+
const parentElementTransformOrigin = new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetLeft - designerCanvas.outerRect.x + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetTop - designerCanvas.outerRect.y + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[1]));
|
|
124
|
+
if (actualElement == element) {
|
|
125
|
+
parentElementTransformOrigin.x -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).x;
|
|
126
|
+
parentElementTransformOrigin.y -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).y;
|
|
127
|
+
}
|
|
119
128
|
const parentElementTransformOriginToPointVector = new DOMPointReadOnly(-parentElementTransformOrigin.x + (element == actualElement ? point.x : byParentTransformedPointRelatedToCanvas.x), -parentElementTransformOrigin.y + (element == actualElement ? point.y : byParentTransformedPointRelatedToCanvas.y));
|
|
120
129
|
parentElementTransformOriginToPointVectorTransformed = parentElementTransformOriginToPointVector.matrixTransform(new DOMMatrix(getComputedStyle(parentElement).transform));
|
|
121
130
|
byParentTransformedPointRelatedToCanvas = new DOMPoint(parentElementTransformOrigin.x + parentElementTransformOriginToPointVectorTransformed.x, parentElementTransformOrigin.y + parentElementTransformOriginToPointVectorTransformed.y);
|
|
@@ -126,6 +135,20 @@ export function getByParentsTransformedPointRelatedToCanvas(element, point, desi
|
|
|
126
135
|
export function getDesignerCanvasNormalizedTransformedPoint(element, point, designerCanvas) {
|
|
127
136
|
return getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, { x: -point.x, y: -point.y }, designerCanvas)[0];
|
|
128
137
|
}
|
|
138
|
+
export function getElementSize(element) {
|
|
139
|
+
let width = element.offsetWidth;
|
|
140
|
+
let height = element.offsetHeight;
|
|
141
|
+
if (element instanceof SVGElement && element.width) {
|
|
142
|
+
width = element.width.baseVal.value;
|
|
143
|
+
height = element.height.baseVal.value;
|
|
144
|
+
}
|
|
145
|
+
else if (element instanceof SVGGraphicsElement) {
|
|
146
|
+
let bbox = element.getBBox();
|
|
147
|
+
width = bbox.width;
|
|
148
|
+
height = bbox.height;
|
|
149
|
+
}
|
|
150
|
+
return { width, height };
|
|
151
|
+
}
|
|
129
152
|
export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas) {
|
|
130
153
|
const topleft = 0;
|
|
131
154
|
const topright = 1;
|
|
@@ -137,22 +160,7 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
|
|
|
137
160
|
x: p0Offsets.offsetLeft - designerCanvas.containerBoundingRect.left,
|
|
138
161
|
y: p0Offsets.offsetTop - designerCanvas.containerBoundingRect.top
|
|
139
162
|
});
|
|
140
|
-
let width =
|
|
141
|
-
let height = parseInt(getComputedStyle(element).height.replace('px', ''));
|
|
142
|
-
if (getComputedStyle(element).boxSizing == 'content-box') {
|
|
143
|
-
width += parseInt(getComputedStyle(element).paddingLeft.replace('px', ''))
|
|
144
|
-
+ parseInt(getComputedStyle(element).marginLeft.replace('px', ''))
|
|
145
|
-
+ parseInt(getComputedStyle(element).borderLeft.replace('px', ''))
|
|
146
|
-
+ parseInt(getComputedStyle(element).paddingRight.replace('px', ''))
|
|
147
|
-
+ parseInt(getComputedStyle(element).marginRight.replace('px', ''))
|
|
148
|
-
+ parseInt(getComputedStyle(element).borderRight.replace('px', ''));
|
|
149
|
-
height += parseInt(getComputedStyle(element).paddingTop.replace('px', ''))
|
|
150
|
-
+ parseInt(getComputedStyle(element).marginTop.replace('px', ''))
|
|
151
|
-
+ parseInt(getComputedStyle(element).borderTop.replace('px', ''))
|
|
152
|
-
+ parseInt(getComputedStyle(element).paddingBottom.replace('px', ''))
|
|
153
|
-
+ parseInt(getComputedStyle(element).marginBottom.replace('px', ''))
|
|
154
|
-
+ parseInt(getComputedStyle(element).borderBottom.replace('px', ''));
|
|
155
|
-
}
|
|
163
|
+
let { width, height } = getElementSize(element);
|
|
156
164
|
const elementWithoutTransformCornerDOMPoints = [];
|
|
157
165
|
elementWithoutTransformCornerDOMPoints[topleft] = DOMPoint.fromPoint({
|
|
158
166
|
x: p0OffsetsRelatedToCanvas.x - intUntransformedCornerPointsOffset.x,
|
|
@@ -171,12 +179,12 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
|
|
|
171
179
|
y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset.y
|
|
172
180
|
});
|
|
173
181
|
const transformOriginWithoutTransformRelatedToCanvas = DOMPointReadOnly.fromPoint({
|
|
174
|
-
x: p0OffsetsRelatedToCanvas.x +
|
|
175
|
-
y: p0OffsetsRelatedToCanvas.y +
|
|
182
|
+
x: p0OffsetsRelatedToCanvas.x + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]),
|
|
183
|
+
y: p0OffsetsRelatedToCanvas.y + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1]),
|
|
176
184
|
z: 0,
|
|
177
185
|
w: 0
|
|
178
186
|
});
|
|
179
|
-
const designerCanvasNormalizedTransformOrigin = getByParentsTransformedPointRelatedToCanvas(element, new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetLeft - designerCanvas.outerRect.left +
|
|
187
|
+
const designerCanvasNormalizedTransformOrigin = getByParentsTransformedPointRelatedToCanvas(element, new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetLeft - designerCanvas.outerRect.left + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetTop - designerCanvas.outerRect.top + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1])), designerCanvas);
|
|
180
188
|
let top0 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topleft].y));
|
|
181
189
|
let top1 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topright].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topright].y));
|
|
182
190
|
let top2 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[bottomleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[bottomleft].y));
|
|
@@ -178,7 +178,15 @@ export class ContextMenu {
|
|
|
178
178
|
this.close();
|
|
179
179
|
});
|
|
180
180
|
if (item.children != null) {
|
|
181
|
-
|
|
181
|
+
let childmenu = this.renderLevel(item.children);
|
|
182
|
+
li.appendChild(childmenu);
|
|
183
|
+
li.addEventListener('mouseenter', () => {
|
|
184
|
+
const childRect = childmenu.getBoundingClientRect();
|
|
185
|
+
if (childRect.top + childRect.height > window.innerHeight) {
|
|
186
|
+
childmenu.style.top = 'unset';
|
|
187
|
+
childmenu.style.bottom = '0';
|
|
188
|
+
}
|
|
189
|
+
});
|
|
182
190
|
}
|
|
183
191
|
}
|
|
184
192
|
lastWasDivider = false;
|
|
@@ -15,10 +15,20 @@ export declare class DesignItem implements IDesignItem {
|
|
|
15
15
|
clone(): Promise<IDesignItem>;
|
|
16
16
|
replaceNode(newNode: Node): void;
|
|
17
17
|
get nodeType(): NodeType;
|
|
18
|
+
private _attributes;
|
|
18
19
|
get hasAttributes(): boolean;
|
|
19
|
-
|
|
20
|
+
hasAttribute(name: string): boolean;
|
|
21
|
+
getAttribute(name: string): string;
|
|
22
|
+
attributes(): Generator<[string, string], void, unknown>;
|
|
23
|
+
_withoutUndoSetAttribute(name: string, value: string): void;
|
|
24
|
+
_withoutUndoRemoveAttribute(name: string): void;
|
|
25
|
+
private _styles;
|
|
20
26
|
get hasStyles(): boolean;
|
|
21
|
-
|
|
27
|
+
hasStyle(name: string): boolean;
|
|
28
|
+
getStyle(name: string): string;
|
|
29
|
+
styles(): Generator<[string, string], void, unknown>;
|
|
30
|
+
_withoutUndoSetStyle(name: string, value: string): void;
|
|
31
|
+
_withoutUndoRemoveStyle(name: string): void;
|
|
22
32
|
private static _designItemMap;
|
|
23
33
|
get element(): Element;
|
|
24
34
|
get name(): string;
|
|
@@ -33,14 +33,48 @@ export class DesignItem {
|
|
|
33
33
|
return NodeType.TextNode;
|
|
34
34
|
return NodeType.Element;
|
|
35
35
|
}
|
|
36
|
+
_attributes;
|
|
36
37
|
get hasAttributes() {
|
|
37
|
-
return this.
|
|
38
|
+
return this._attributes.size > 0;
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
+
hasAttribute(name) {
|
|
41
|
+
return this._attributes.has(name);
|
|
42
|
+
}
|
|
43
|
+
getAttribute(name) {
|
|
44
|
+
return this._attributes.get(name);
|
|
45
|
+
}
|
|
46
|
+
*attributes() {
|
|
47
|
+
for (let s of this._attributes) {
|
|
48
|
+
yield s;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
_withoutUndoSetAttribute(name, value) {
|
|
52
|
+
this._attributes.set(name, value);
|
|
53
|
+
}
|
|
54
|
+
_withoutUndoRemoveAttribute(name) {
|
|
55
|
+
this._attributes.delete(name);
|
|
56
|
+
}
|
|
57
|
+
_styles;
|
|
40
58
|
get hasStyles() {
|
|
41
|
-
return this.
|
|
59
|
+
return this._styles.size > 0;
|
|
60
|
+
}
|
|
61
|
+
hasStyle(name) {
|
|
62
|
+
return this._styles.has(name);
|
|
63
|
+
}
|
|
64
|
+
getStyle(name) {
|
|
65
|
+
return this._styles.get(name);
|
|
66
|
+
}
|
|
67
|
+
*styles() {
|
|
68
|
+
for (let s of this._styles) {
|
|
69
|
+
yield s;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
_withoutUndoSetStyle(name, value) {
|
|
73
|
+
this._styles.set(name, value);
|
|
74
|
+
}
|
|
75
|
+
_withoutUndoRemoveStyle(name) {
|
|
76
|
+
this._styles.delete(name);
|
|
42
77
|
}
|
|
43
|
-
styles;
|
|
44
78
|
static _designItemMap = new WeakMap();
|
|
45
79
|
get element() {
|
|
46
80
|
return this.node;
|
|
@@ -140,12 +174,12 @@ export class DesignItem {
|
|
|
140
174
|
set hideAtDesignTime(value) {
|
|
141
175
|
this._hideAtDesignTime = value;
|
|
142
176
|
if (value)
|
|
143
|
-
this.
|
|
177
|
+
this._attributes.set(hideAtDesignTimeAttributeName, "");
|
|
144
178
|
else
|
|
145
|
-
this.
|
|
179
|
+
this._attributes.delete(hideAtDesignTimeAttributeName);
|
|
146
180
|
if (this.element instanceof HTMLElement || this.element instanceof SVGElement) {
|
|
147
181
|
if (!value)
|
|
148
|
-
this.element.style.display = this.
|
|
182
|
+
this.element.style.display = this._styles.get('display') ?? "";
|
|
149
183
|
else
|
|
150
184
|
this.element.style.display = 'none';
|
|
151
185
|
}
|
|
@@ -157,12 +191,12 @@ export class DesignItem {
|
|
|
157
191
|
set hideAtRunTime(value) {
|
|
158
192
|
this._hideAtRunTime = value;
|
|
159
193
|
if (value)
|
|
160
|
-
this.
|
|
194
|
+
this._attributes.set(hideAtRunTimeAttributeName, "");
|
|
161
195
|
else
|
|
162
|
-
this.
|
|
196
|
+
this._attributes.delete(hideAtRunTimeAttributeName);
|
|
163
197
|
if (this.element instanceof HTMLElement || this.element instanceof SVGElement) {
|
|
164
198
|
if (!value)
|
|
165
|
-
this.element.style.opacity = this.
|
|
199
|
+
this.element.style.opacity = this._styles.get('opacity') ?? "";
|
|
166
200
|
else
|
|
167
201
|
this.element.style.opacity = '0.3';
|
|
168
202
|
}
|
|
@@ -174,9 +208,9 @@ export class DesignItem {
|
|
|
174
208
|
set lockAtDesignTime(value) {
|
|
175
209
|
this._lockAtDesignTime = value;
|
|
176
210
|
if (value)
|
|
177
|
-
this.
|
|
211
|
+
this._attributes.set(lockAtDesignTimeAttributeName, "");
|
|
178
212
|
else
|
|
179
|
-
this.
|
|
213
|
+
this._attributes.delete(lockAtDesignTimeAttributeName);
|
|
180
214
|
if (this.element instanceof HTMLElement || this.element instanceof SVGElement) {
|
|
181
215
|
if (!value)
|
|
182
216
|
this.element.style.pointerEvents = 'auto';
|
|
@@ -189,7 +223,7 @@ export class DesignItem {
|
|
|
189
223
|
if (designItem.nodeType == NodeType.Element) {
|
|
190
224
|
for (let a of designItem.element.attributes) {
|
|
191
225
|
if (a.name !== 'style') {
|
|
192
|
-
designItem.
|
|
226
|
+
designItem._attributes.set(a.name, a.value);
|
|
193
227
|
if (a.name === hideAtDesignTimeAttributeName)
|
|
194
228
|
designItem._hideAtDesignTime = true;
|
|
195
229
|
if (a.name === hideAtRunTimeAttributeName)
|
|
@@ -204,7 +238,7 @@ export class DesignItem {
|
|
|
204
238
|
if (st) {
|
|
205
239
|
cssParser.parse(st);
|
|
206
240
|
for (let e of cssParser.entries) {
|
|
207
|
-
designItem.
|
|
241
|
+
designItem._styles.set(e.name, e.value);
|
|
208
242
|
}
|
|
209
243
|
}
|
|
210
244
|
if (!designItem._lockAtDesignTime) {
|
|
@@ -230,8 +264,8 @@ export class DesignItem {
|
|
|
230
264
|
this.node = node;
|
|
231
265
|
this.serviceContainer = serviceContainer;
|
|
232
266
|
this.instanceServiceContainer = instanceServiceContainer;
|
|
233
|
-
this.
|
|
234
|
-
this.
|
|
267
|
+
this._attributes = new Map();
|
|
268
|
+
this._styles = new Map();
|
|
235
269
|
DesignItem._designItemMap.set(node, this);
|
|
236
270
|
}
|
|
237
271
|
openGroup(title) {
|
|
@@ -257,20 +291,20 @@ export class DesignItem {
|
|
|
257
291
|
}
|
|
258
292
|
setStyle(name, value) {
|
|
259
293
|
let nm = PropertiesHelper.camelToDashCase(name);
|
|
260
|
-
const action = new CssStyleChangeAction(this, nm, value, this.
|
|
294
|
+
const action = new CssStyleChangeAction(this, nm, value, this._styles.get(nm));
|
|
261
295
|
this.instanceServiceContainer.undoService.execute(action);
|
|
262
296
|
}
|
|
263
297
|
removeStyle(name) {
|
|
264
298
|
let nm = PropertiesHelper.camelToDashCase(name);
|
|
265
|
-
const action = new CssStyleChangeAction(this, nm, '', this.
|
|
299
|
+
const action = new CssStyleChangeAction(this, nm, '', this._styles.get(nm));
|
|
266
300
|
this.instanceServiceContainer.undoService.execute(action);
|
|
267
301
|
}
|
|
268
302
|
setAttribute(name, value) {
|
|
269
|
-
const action = new AttributeChangeAction(this, name, value, this.
|
|
303
|
+
const action = new AttributeChangeAction(this, name, value, this._attributes.get(name));
|
|
270
304
|
this.instanceServiceContainer.undoService.execute(action);
|
|
271
305
|
}
|
|
272
306
|
removeAttribute(name) {
|
|
273
|
-
const action = new AttributeChangeAction(this, name, null, this.
|
|
307
|
+
const action = new AttributeChangeAction(this, name, null, this._attributes.get(name));
|
|
274
308
|
this.instanceServiceContainer.undoService.execute(action);
|
|
275
309
|
}
|
|
276
310
|
// Internal implementations wich don't use undo/redo
|
|
@@ -289,6 +323,7 @@ export class DesignItem {
|
|
|
289
323
|
this.node.insertBefore(designItem.node, el.element);
|
|
290
324
|
this._childArray.splice(index, 0, designItem);
|
|
291
325
|
}
|
|
326
|
+
//todo: is this still needed???
|
|
292
327
|
if (this.instanceServiceContainer.selectionService.primarySelection == designItem)
|
|
293
328
|
designItem.instanceServiceContainer.designerCanvas.extensionManager.applyExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
|
|
294
329
|
}
|
|
@@ -14,9 +14,7 @@ export interface IDesignItem {
|
|
|
14
14
|
id: string;
|
|
15
15
|
readonly isRootItem: boolean;
|
|
16
16
|
readonly hasAttributes: boolean;
|
|
17
|
-
readonly attributes: Map<string, string>;
|
|
18
17
|
readonly hasStyles: boolean;
|
|
19
|
-
readonly styles: Map<string, string>;
|
|
20
18
|
readonly hasChildren: boolean;
|
|
21
19
|
children(): IterableIterator<IDesignItem>;
|
|
22
20
|
readonly childCount: number;
|
|
@@ -24,6 +22,10 @@ export interface IDesignItem {
|
|
|
24
22
|
readonly parent: IDesignItem;
|
|
25
23
|
_insertChildInternal(designItem: IDesignItem, index?: number): any;
|
|
26
24
|
_removeChildInternal(designItem: IDesignItem): any;
|
|
25
|
+
_withoutUndoSetStyle(name: string, value: string): any;
|
|
26
|
+
_withoutUndoRemoveStyle(name: string): any;
|
|
27
|
+
_withoutUndoSetAttribute(name: string, value: string): any;
|
|
28
|
+
_withoutUndoRemoveAttribute(name: string): any;
|
|
27
29
|
indexOf(designItem: IDesignItem): number;
|
|
28
30
|
insertAdjacentElement(designItem: IDesignItem, where: InsertPosition): any;
|
|
29
31
|
insertChild(designItem: IDesignItem, index?: number): any;
|
|
@@ -42,8 +44,14 @@ export interface IDesignItem {
|
|
|
42
44
|
appliedDesignerExtensions: Map<ExtensionType, IDesignerExtension[]>;
|
|
43
45
|
getOrCreateDesignItem(node: Node): any;
|
|
44
46
|
openGroup(title: string): ChangeGroup;
|
|
47
|
+
styles(): Iterable<[name: string, value: string]>;
|
|
48
|
+
getStyle(name: string): any;
|
|
49
|
+
hasStyle(name: string): any;
|
|
45
50
|
setStyle(name: string, value?: string | null): any;
|
|
46
51
|
removeStyle(name: string): any;
|
|
52
|
+
attributes(): Iterable<[name: string, value: string]>;
|
|
53
|
+
getAttribute(name: string): any;
|
|
54
|
+
hasAttribute(name: string): any;
|
|
47
55
|
setAttribute(name: string, value?: string | null): any;
|
|
48
56
|
removeAttribute(name: string): any;
|
|
49
57
|
hideAtDesignTime: boolean;
|
|
@@ -5,7 +5,7 @@ export class BaseCustomWebcomponentBindingsService {
|
|
|
5
5
|
static type = 'base-custom-webcomponent-binding';
|
|
6
6
|
getBindings(designItem) {
|
|
7
7
|
let bindings = null;
|
|
8
|
-
for (let a of designItem.attributes) {
|
|
8
|
+
for (let a of designItem.attributes()) {
|
|
9
9
|
const name = a[0];
|
|
10
10
|
const value = a[1];
|
|
11
11
|
if ((value.startsWith('[[') || value.startsWith('{{')) && (value.endsWith('}}') || value.endsWith(']]'))) {
|
|
@@ -4,6 +4,6 @@ import { ServiceContainer } from "../ServiceContainer";
|
|
|
4
4
|
import { IHtmlParserService } from "./IHtmlParserService";
|
|
5
5
|
export declare class DefaultHtmlParserService implements IHtmlParserService {
|
|
6
6
|
parse(html: string, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): Promise<IDesignItem[]>;
|
|
7
|
-
createDesignItems(elements: HTMLCollection | HTMLElement[], serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): IDesignItem[];
|
|
7
|
+
createDesignItems(elements: NodeListOf<ChildNode> | Node[] | HTMLCollection | HTMLElement[], serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): IDesignItem[];
|
|
8
8
|
private _createDesignItemsRecursive;
|
|
9
9
|
}
|
|
@@ -3,7 +3,7 @@ export class DefaultHtmlParserService {
|
|
|
3
3
|
async parse(html, serviceContainer, instanceServiceContainer) {
|
|
4
4
|
const parser = new DOMParser();
|
|
5
5
|
const doc = parser.parseFromString(html, 'text/html');
|
|
6
|
-
return this.createDesignItems(doc.body.
|
|
6
|
+
return this.createDesignItems(doc.body.childNodes, serviceContainer, instanceServiceContainer);
|
|
7
7
|
}
|
|
8
8
|
createDesignItems(elements, serviceContainer, instanceServiceContainer) {
|
|
9
9
|
let res = [];
|
|
@@ -12,7 +12,7 @@ export class DefaultHtmlParserService {
|
|
|
12
12
|
}
|
|
13
13
|
return res;
|
|
14
14
|
}
|
|
15
|
-
_createDesignItemsRecursive(
|
|
16
|
-
return DesignItem.createDesignItemFromInstance(
|
|
15
|
+
_createDesignItemsRecursive(node, serviceContainer, instanceServiceContainer) {
|
|
16
|
+
return DesignItem.createDesignItemFromInstance(node, serviceContainer, instanceServiceContainer);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -55,7 +55,7 @@ export class LitElementParserService {
|
|
|
55
55
|
let attr = item.attributes;
|
|
56
56
|
for (let a in attr) {
|
|
57
57
|
if (a !== 'style') {
|
|
58
|
-
designItem.
|
|
58
|
+
designItem._withoutUndoSetAttribute(a, attr[a]);
|
|
59
59
|
if (manualCreatedElement) {
|
|
60
60
|
element.setAttribute(a, attr[a]);
|
|
61
61
|
}
|
|
@@ -74,7 +74,7 @@ export class LitElementParserService {
|
|
|
74
74
|
let styleParser = new CssAttributeParser();
|
|
75
75
|
styleParser.parse(style);
|
|
76
76
|
for (let s of styleParser.entries) {
|
|
77
|
-
designItem.
|
|
77
|
+
designItem._withoutUndoSetStyle(s.name, s.value);
|
|
78
78
|
if (manualCreatedElement) {
|
|
79
79
|
element.style[s.name] = s.value;
|
|
80
80
|
}
|
|
@@ -45,7 +45,7 @@ export class NodeHtmlParserService {
|
|
|
45
45
|
let attr = item.attributes;
|
|
46
46
|
for (let a in attr) {
|
|
47
47
|
if (a !== 'style') {
|
|
48
|
-
designItem.
|
|
48
|
+
designItem._withoutUndoSetAttribute(a, attr[a]);
|
|
49
49
|
if (manualCreatedElement) {
|
|
50
50
|
element.setAttribute(a, attr[a]);
|
|
51
51
|
}
|
|
@@ -64,7 +64,7 @@ export class NodeHtmlParserService {
|
|
|
64
64
|
let styleParser = new CssAttributeParser();
|
|
65
65
|
styleParser.parse(style);
|
|
66
66
|
for (let s of styleParser.entries) {
|
|
67
|
-
designItem.
|
|
67
|
+
designItem._withoutUndoSetStyle(s.name, s.value);
|
|
68
68
|
if (manualCreatedElement) {
|
|
69
69
|
element.style[s.name] = s.value;
|
|
70
70
|
}
|
|
@@ -4,7 +4,7 @@ import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper
|
|
|
4
4
|
export class AbstractHtmlWriterService {
|
|
5
5
|
writeAttributes(indentedTextWriter, designItem, options) {
|
|
6
6
|
if (designItem.hasAttributes) {
|
|
7
|
-
for (const a of designItem.attributes) {
|
|
7
|
+
for (const a of designItem.attributes()) {
|
|
8
8
|
indentedTextWriter.write(' ');
|
|
9
9
|
if (typeof a[1] === 'string') {
|
|
10
10
|
if (a[1] === "")
|
|
@@ -48,9 +48,9 @@ export class AbstractHtmlWriterService {
|
|
|
48
48
|
writeStyles(indentedTextWriter, designItem, options) {
|
|
49
49
|
if (designItem.hasStyles) {
|
|
50
50
|
indentedTextWriter.write(' style="');
|
|
51
|
-
let styles = designItem.styles;
|
|
51
|
+
let styles = designItem.styles();
|
|
52
52
|
if (options.compressCssToShorthandProperties)
|
|
53
|
-
styles = CssCombiner.combine(styles);
|
|
53
|
+
styles = CssCombiner.combine(new Map(styles));
|
|
54
54
|
for (const s of styles) {
|
|
55
55
|
if (s[0]) {
|
|
56
56
|
indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
@@ -12,7 +12,7 @@ var ElementContainerType;
|
|
|
12
12
|
export class FormatingHtmlWriterService {
|
|
13
13
|
writeAttributes(writeContext, designItem) {
|
|
14
14
|
if (designItem.hasAttributes) {
|
|
15
|
-
for (const a of designItem.attributes) {
|
|
15
|
+
for (const a of designItem.attributes()) {
|
|
16
16
|
writeContext.indentedTextWriter.write(' ');
|
|
17
17
|
if (typeof a[1] === 'string') {
|
|
18
18
|
if (a[1] === "")
|
|
@@ -30,9 +30,9 @@ export class FormatingHtmlWriterService {
|
|
|
30
30
|
writeStyles(writeContext, designItem) {
|
|
31
31
|
if (designItem.hasStyles) {
|
|
32
32
|
writeContext.indentedTextWriter.write(' style="');
|
|
33
|
-
let styles = designItem.styles;
|
|
33
|
+
let styles = designItem.styles();
|
|
34
34
|
if (writeContext.options.compressCssToShorthandProperties)
|
|
35
|
-
styles = CssCombiner.combine(styles);
|
|
35
|
+
styles = CssCombiner.combine(new Map(styles));
|
|
36
36
|
for (const s of styles) {
|
|
37
37
|
if (s[0]) {
|
|
38
38
|
writeContext.indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
@@ -11,7 +11,7 @@ export var ElementContainerType;
|
|
|
11
11
|
export class SimpleHtmlWriterService {
|
|
12
12
|
writeAttributes(writeContext, designItem) {
|
|
13
13
|
if (designItem.hasAttributes) {
|
|
14
|
-
for (const a of designItem.attributes) {
|
|
14
|
+
for (const a of designItem.attributes()) {
|
|
15
15
|
writeContext.indentedTextWriter.write(' ');
|
|
16
16
|
if (typeof a[1] === 'string') {
|
|
17
17
|
if (a[1] === "")
|
|
@@ -29,9 +29,9 @@ export class SimpleHtmlWriterService {
|
|
|
29
29
|
writeStyles(writeContext, designItem) {
|
|
30
30
|
if (designItem.hasStyles) {
|
|
31
31
|
writeContext.indentedTextWriter.write(' style="');
|
|
32
|
-
let styles = designItem.styles;
|
|
32
|
+
let styles = designItem.styles();
|
|
33
33
|
if (writeContext.options.compressCssToShorthandProperties)
|
|
34
|
-
styles = CssCombiner.combine(styles);
|
|
34
|
+
styles = CssCombiner.combine(new Map(styles));
|
|
35
35
|
for (const s of styles) {
|
|
36
36
|
if (s[0]) {
|
|
37
37
|
writeContext.indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { BindingTarget } from "../../item/BindingTarget";
|
|
2
2
|
import { IElementDefinition } from "../elementsService/IElementDefinition";
|
|
3
3
|
import { IElementsService } from "../elementsService/IElementsService";
|
|
4
|
-
import { IPropertiesService } from "../propertiesService/IPropertiesService";
|
|
4
|
+
import { IPropertiesService, RefreshMode } from "../propertiesService/IPropertiesService";
|
|
5
5
|
import { IProperty } from "../propertiesService/IProperty";
|
|
6
6
|
import { IDesignItem } from "../../item/IDesignItem";
|
|
7
7
|
import { AbstractPropertiesService } from "../propertiesService/services/AbstractPropertiesService";
|
|
8
8
|
export declare class WebcomponentManifestParserService extends AbstractPropertiesService implements IElementsService, IPropertiesService {
|
|
9
|
-
|
|
9
|
+
getRefreshMode(designItem: IDesignItem): RefreshMode;
|
|
10
10
|
private _name;
|
|
11
11
|
get name(): string;
|
|
12
12
|
private _packageData;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { BindingTarget } from "../../item/BindingTarget";
|
|
2
|
+
import { RefreshMode } from "../propertiesService/IPropertiesService";
|
|
2
3
|
import { PropertyType } from "../propertiesService/PropertyType";
|
|
3
4
|
import { AbstractPropertiesService } from "../propertiesService/services/AbstractPropertiesService";
|
|
4
5
|
export class WebcomponentManifestParserService extends AbstractPropertiesService {
|
|
5
|
-
|
|
6
|
-
return
|
|
6
|
+
getRefreshMode(designItem) {
|
|
7
|
+
return RefreshMode.none;
|
|
7
8
|
}
|
|
8
9
|
_name;
|
|
9
10
|
get name() { return this._name; }
|