@node-projects/web-component-designer 0.1.10 → 0.1.12
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 +1 -1
- package/dist/elements/helper/ElementHelper.js +30 -4
- package/dist/elements/helper/TransformHelper.d.ts +2 -2
- package/dist/elements/helper/TransformHelper.js +11 -7
- package/dist/elements/item/DesignItem.d.ts +3 -1
- package/dist/elements/item/DesignItem.js +11 -5
- package/dist/elements/item/IDesignItem.d.ts +1 -0
- package/dist/elements/services/BaseServiceContainer.d.ts +1 -0
- package/dist/elements/services/BaseServiceContainer.js +6 -0
- package/dist/elements/services/placementService/DefaultPlacementService.js +1 -1
- package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.js +15 -0
- package/dist/elements/widgets/designerView/extensions/AbstractExtension.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +1 -1
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +1 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +36 -10
- package/dist/elements/widgets/designerView/extensions/IDesignerExtension.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/OverlayLayer.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/OverlayLayer.js +1 -1
- package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +4 -4
- package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension.js +5 -5
- package/dist/elements/widgets/designerView/overlayLayerView.d.ts +6 -0
- package/dist/elements/widgets/designerView/overlayLayerView.js +39 -4
- package/dist/elements/widgets/designerView/tools/DrawElementTool.js +1 -1
- package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -1
- package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -1
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +1 -1
- package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -1
- package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +1 -1
- package/dist/elements/widgets/designerView/tools/PointerTool.js +2 -2
- package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +1 -1
- package/dist/elements/widgets/designerView/tools/ZoomTool.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +1 -1
|
@@ -15,7 +15,7 @@ export declare function getElementDisplaytype(element: HTMLElement): ElementDisp
|
|
|
15
15
|
export declare function isEmptyTextNode(node: Node): boolean;
|
|
16
16
|
export declare function getActiveElement(): Element;
|
|
17
17
|
export declare function getParentElementIncludingSlots(element: Element): Element;
|
|
18
|
-
export declare function getElementsWindowOffsetWithoutSelfAndParentTransformations(element: any, zoom: number): {
|
|
18
|
+
export declare function getElementsWindowOffsetWithoutSelfAndParentTransformations(element: any, zoom: number, cache?: Record<string | symbol, any>): {
|
|
19
19
|
offsetLeft: number;
|
|
20
20
|
offsetTop: number;
|
|
21
21
|
};
|
|
@@ -55,25 +55,45 @@ export function getParentElementIncludingSlots(element) {
|
|
|
55
55
|
}
|
|
56
56
|
return element.parentElement;
|
|
57
57
|
}
|
|
58
|
-
|
|
58
|
+
const windowOffsetsCacheKey = Symbol('windowOffsetsCacheKey');
|
|
59
|
+
export function getElementsWindowOffsetWithoutSelfAndParentTransformations(element, zoom, cache = {}) {
|
|
59
60
|
let offsetLeft = 0;
|
|
60
61
|
let offsetTop = 0;
|
|
62
|
+
let ch = cache[windowOffsetsCacheKey] = cache[windowOffsetsCacheKey] ?? new Map();
|
|
63
|
+
let lst = [];
|
|
61
64
|
while (element) {
|
|
65
|
+
let cachedObj = ch.get(element);
|
|
66
|
+
if (cachedObj) {
|
|
67
|
+
offsetLeft += cachedObj.offsetLeft;
|
|
68
|
+
offsetTop += cachedObj.offsetTop;
|
|
69
|
+
lst.forEach(x => { x.offsetLeft += cachedObj.offsetLeft; x.offsetTop += cachedObj.offsetTop; });
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
62
72
|
if (element instanceof SVGSVGElement) {
|
|
63
|
-
//
|
|
73
|
+
//TODO: !huge Perf impact! - fix without transformation
|
|
64
74
|
let t = element.style.transform;
|
|
65
75
|
element.style.transform = '';
|
|
66
76
|
const bcEl = element.getBoundingClientRect();
|
|
67
77
|
const bcPar = element.parentElement.getBoundingClientRect();
|
|
68
78
|
element.style.transform = t;
|
|
69
|
-
|
|
70
|
-
|
|
79
|
+
const currLeft = (bcEl.left - bcPar.left) / zoom;
|
|
80
|
+
const currTop = (bcEl.top - bcPar.top) / zoom;
|
|
81
|
+
offsetLeft += currLeft;
|
|
82
|
+
offsetTop += currTop;
|
|
83
|
+
lst.forEach(x => { x.offsetLeft += currLeft; x.offsetTop += currTop; });
|
|
84
|
+
const cacheEntry = { offsetLeft: currLeft, offsetTop: currTop };
|
|
85
|
+
lst.push(cacheEntry);
|
|
86
|
+
ch.set(element, cacheEntry);
|
|
71
87
|
element = element.parentElement;
|
|
72
88
|
}
|
|
73
89
|
else if (element instanceof SVGGraphicsElement) {
|
|
74
90
|
let bbox = element.getBBox();
|
|
75
91
|
offsetLeft += bbox.x;
|
|
76
92
|
offsetTop += bbox.y;
|
|
93
|
+
lst.forEach(x => { x.offsetLeft += bbox.x; x.offsetTop += bbox.y; });
|
|
94
|
+
const cacheEntry = { offsetLeft: bbox.x, offsetTop: bbox.y };
|
|
95
|
+
lst.push(cacheEntry);
|
|
96
|
+
ch.set(element, cacheEntry);
|
|
77
97
|
element = element.ownerSVGElement;
|
|
78
98
|
}
|
|
79
99
|
else if (element instanceof HTMLBodyElement) {
|
|
@@ -83,6 +103,12 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
|
|
|
83
103
|
element = element.parentElement;
|
|
84
104
|
}
|
|
85
105
|
else {
|
|
106
|
+
const currLeft = element.offsetLeft;
|
|
107
|
+
const currTop = element.offsetTop;
|
|
108
|
+
lst.forEach(x => { x.offsetLeft += currLeft; x.offsetTop += currTop; });
|
|
109
|
+
const cacheEntry = { offsetLeft: currLeft, offsetTop: currTop };
|
|
110
|
+
lst.push(cacheEntry);
|
|
111
|
+
ch.set(element, cacheEntry);
|
|
86
112
|
offsetLeft += element.offsetLeft;
|
|
87
113
|
offsetTop += element.offsetTop;
|
|
88
114
|
element = element.offsetParent;
|
|
@@ -11,13 +11,13 @@ export declare function getRotationAngleFromMatrix(matrixArray: number[], domMat
|
|
|
11
11
|
export declare function addVectors(vectorA: [number, number], vectorB: [number, number]): [number, number];
|
|
12
12
|
export declare function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element: HTMLElement, designerCanvas: IDesignerCanvas): DOMPoint;
|
|
13
13
|
export declare function getResultingTransformationBetweenElementAndAllAncestors(element: HTMLElement, ancestor: HTMLElement, excludeAncestor?: boolean): DOMMatrix;
|
|
14
|
-
export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas): IPoint;
|
|
14
|
+
export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas, cache?: Record<string | symbol, any>): IPoint;
|
|
15
15
|
export declare function getDesignerCanvasNormalizedTransformedPoint(element: HTMLElement, point: IPoint, designerCanvas: IDesignerCanvas): IPoint;
|
|
16
16
|
export declare function getElementSize(element: HTMLElement): {
|
|
17
17
|
width: number;
|
|
18
18
|
height: number;
|
|
19
19
|
};
|
|
20
|
-
export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: IPoint | null, designerCanvas: IDesignerCanvas): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
|
|
20
|
+
export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: IPoint | null, designerCanvas: IDesignerCanvas, cache?: Record<string | symbol, any>): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
|
|
21
21
|
export declare function extractTranslationFromDOMMatrix(matrix: DOMMatrix): DOMPoint;
|
|
22
22
|
export declare function extractRotationAngleFromDOMMatrix(matrix: DOMMatrix): number;
|
|
23
23
|
export declare function normalizeToAbsolutePosition(element: HTMLElement, normalizeProperty: "left" | "top"): string;
|
|
@@ -109,6 +109,7 @@ export function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransfo
|
|
|
109
109
|
return designerCanvasNormalizedTransformedOrigin;
|
|
110
110
|
}
|
|
111
111
|
export function getResultingTransformationBetweenElementAndAllAncestors(element, ancestor, excludeAncestor) {
|
|
112
|
+
//TODO: introduce cache and optimize
|
|
112
113
|
let actualElement = element;
|
|
113
114
|
let actualElementMatrix;
|
|
114
115
|
let newElementMatrix;
|
|
@@ -128,14 +129,15 @@ export function getResultingTransformationBetweenElementAndAllAncestors(element,
|
|
|
128
129
|
}
|
|
129
130
|
return originalElementAndAllParentsMultipliedMatrix;
|
|
130
131
|
}
|
|
131
|
-
export function getByParentsTransformedPointRelatedToCanvas(element, point, designerCanvas) {
|
|
132
|
+
export function getByParentsTransformedPointRelatedToCanvas(element, point, designerCanvas, cache) {
|
|
132
133
|
const canvas = element.closest('#node-projects-designer-canvas-canvas');
|
|
133
134
|
let actualElement = element;
|
|
134
135
|
let parentElementTransformOriginToPointVectorTransformed;
|
|
135
136
|
let byParentTransformedPointRelatedToCanvas = { x: 0, y: 0 };
|
|
136
137
|
while (actualElement != canvas) {
|
|
137
138
|
const parentElement = getParentElementIncludingSlots(actualElement);
|
|
138
|
-
const
|
|
139
|
+
const elementWindowOffset = getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement, designerCanvas.zoomFactor, cache);
|
|
140
|
+
const parentElementTransformOrigin = new DOMPoint(elementWindowOffset.offsetLeft - designerCanvas.outerRect.x + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[0]), elementWindowOffset.offsetTop - designerCanvas.outerRect.y + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[1]));
|
|
139
141
|
if (actualElement == element) {
|
|
140
142
|
parentElementTransformOrigin.x -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).x;
|
|
141
143
|
parentElementTransformOrigin.y -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).y;
|
|
@@ -164,13 +166,13 @@ export function getElementSize(element) {
|
|
|
164
166
|
}
|
|
165
167
|
return { width, height };
|
|
166
168
|
}
|
|
167
|
-
export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas) {
|
|
169
|
+
export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas, cache) {
|
|
168
170
|
const topleft = 0;
|
|
169
171
|
const topright = 1;
|
|
170
172
|
const bottomleft = 2;
|
|
171
173
|
const bottomright = 3;
|
|
172
174
|
const intUntransformedCornerPointsOffset = untransformedCornerPointsOffset ? { x: untransformedCornerPointsOffset.x / designerCanvas.scaleFactor, y: untransformedCornerPointsOffset.y / designerCanvas.scaleFactor } : { x: 0, y: 0 };
|
|
173
|
-
const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element, designerCanvas.zoomFactor);
|
|
175
|
+
const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element, designerCanvas.zoomFactor, cache);
|
|
174
176
|
const p0OffsetsRelatedToCanvas = DOMPoint.fromPoint({
|
|
175
177
|
x: p0Offsets.offsetLeft - designerCanvas.containerBoundingRect.left,
|
|
176
178
|
y: p0Offsets.offsetTop - designerCanvas.containerBoundingRect.top
|
|
@@ -193,13 +195,15 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
|
|
|
193
195
|
x: p0OffsetsRelatedToCanvas.x + width + intUntransformedCornerPointsOffset.x,
|
|
194
196
|
y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset.y
|
|
195
197
|
});
|
|
198
|
+
const tfX = parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]);
|
|
199
|
+
const tfY = parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1]);
|
|
196
200
|
const transformOriginWithoutTransformRelatedToCanvas = DOMPointReadOnly.fromPoint({
|
|
197
|
-
x: p0OffsetsRelatedToCanvas.x +
|
|
198
|
-
y: p0OffsetsRelatedToCanvas.y +
|
|
201
|
+
x: p0OffsetsRelatedToCanvas.x + tfX,
|
|
202
|
+
y: p0OffsetsRelatedToCanvas.y + tfY,
|
|
199
203
|
z: 0,
|
|
200
204
|
w: 0
|
|
201
205
|
});
|
|
202
|
-
const designerCanvasNormalizedTransformOrigin = getByParentsTransformedPointRelatedToCanvas(element, new DOMPoint(
|
|
206
|
+
const designerCanvasNormalizedTransformOrigin = getByParentsTransformedPointRelatedToCanvas(element, new DOMPoint(p0Offsets.offsetLeft - designerCanvas.outerRect.left + tfX, p0Offsets.offsetTop - designerCanvas.outerRect.top + tfY), designerCanvas, cache);
|
|
203
207
|
let top0 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topleft].y));
|
|
204
208
|
let top1 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topright].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topright].y));
|
|
205
209
|
let top2 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[bottomleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[bottomleft].y));
|
|
@@ -15,6 +15,7 @@ export declare class DesignItem implements IDesignItem {
|
|
|
15
15
|
lastContainerSize: ISize;
|
|
16
16
|
parsedNode: any;
|
|
17
17
|
node: Node;
|
|
18
|
+
view: Node;
|
|
18
19
|
serviceContainer: ServiceContainer;
|
|
19
20
|
instanceServiceContainer: InstanceServiceContainer;
|
|
20
21
|
appliedDesignerExtensions: Map<ExtensionType, IDesignerExtension[]>;
|
|
@@ -73,6 +74,7 @@ export declare class DesignItem implements IDesignItem {
|
|
|
73
74
|
static createDesignItemFromInstance(node: Node, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): DesignItem;
|
|
74
75
|
updateChildrenFromNodesChildren(): void;
|
|
75
76
|
constructor(node: Node, parsedNode: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer);
|
|
77
|
+
setView(node: Element): void;
|
|
76
78
|
openGroup(title: string): ChangeGroup;
|
|
77
79
|
getOrCreateDesignItem(node: Node): IDesignItem;
|
|
78
80
|
static GetOrCreateDesignItem(node: Node, parsedNode: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): IDesignItem;
|
|
@@ -88,7 +90,7 @@ export declare class DesignItem implements IDesignItem {
|
|
|
88
90
|
getAllStyles(): IStyleRule[];
|
|
89
91
|
setAttribute(name: string, value?: string | null): void;
|
|
90
92
|
removeAttribute(name: string): void;
|
|
91
|
-
_insertChildInternal(designItem:
|
|
93
|
+
_insertChildInternal(designItem: DesignItem, index?: number): void;
|
|
92
94
|
_removeChildInternal(designItem: IDesignItem): void;
|
|
93
95
|
_refreshIfStyleSheet(): void;
|
|
94
96
|
getPlacementService(style?: CSSStyleDeclaration): IPlacementService;
|
|
@@ -18,6 +18,7 @@ export class DesignItem {
|
|
|
18
18
|
lastContainerSize;
|
|
19
19
|
parsedNode;
|
|
20
20
|
node;
|
|
21
|
+
view;
|
|
21
22
|
serviceContainer;
|
|
22
23
|
instanceServiceContainer;
|
|
23
24
|
appliedDesignerExtensions = new Map();
|
|
@@ -133,10 +134,10 @@ export class DesignItem {
|
|
|
133
134
|
}
|
|
134
135
|
static _designItemMap = new WeakMap();
|
|
135
136
|
get element() {
|
|
136
|
-
return this.
|
|
137
|
+
return this.view;
|
|
137
138
|
}
|
|
138
139
|
get name() {
|
|
139
|
-
return this.
|
|
140
|
+
return this.node.localName;
|
|
140
141
|
}
|
|
141
142
|
get id() {
|
|
142
143
|
return this.element.id;
|
|
@@ -320,6 +321,7 @@ export class DesignItem {
|
|
|
320
321
|
}
|
|
321
322
|
constructor(node, parsedNode, serviceContainer, instanceServiceContainer) {
|
|
322
323
|
this.node = node;
|
|
324
|
+
this.view = node;
|
|
323
325
|
this.parsedNode = parsedNode;
|
|
324
326
|
this.serviceContainer = serviceContainer;
|
|
325
327
|
this.instanceServiceContainer = instanceServiceContainer;
|
|
@@ -327,6 +329,10 @@ export class DesignItem {
|
|
|
327
329
|
this._styles = new Map();
|
|
328
330
|
DesignItem._designItemMap.set(node, this);
|
|
329
331
|
}
|
|
332
|
+
setView(node) {
|
|
333
|
+
this.view = node;
|
|
334
|
+
DesignItem._designItemMap.set(node, this);
|
|
335
|
+
}
|
|
330
336
|
openGroup(title) {
|
|
331
337
|
return this.instanceServiceContainer.undoService.openGroup(title);
|
|
332
338
|
}
|
|
@@ -451,11 +457,11 @@ export class DesignItem {
|
|
|
451
457
|
}
|
|
452
458
|
if (index == null || this._childArray.length == 0 || index >= this._childArray.length) {
|
|
453
459
|
this._childArray.push(designItem);
|
|
454
|
-
this.
|
|
460
|
+
this.view.appendChild(designItem.view);
|
|
455
461
|
}
|
|
456
462
|
else {
|
|
457
463
|
let el = this._childArray[index];
|
|
458
|
-
this.
|
|
464
|
+
this.view.insertBefore(designItem.view, el.element);
|
|
459
465
|
this._childArray.splice(index, 0, designItem);
|
|
460
466
|
}
|
|
461
467
|
designItem._parent = this;
|
|
@@ -486,7 +492,7 @@ export class DesignItem {
|
|
|
486
492
|
//Update Stylesheetservice with sheet info
|
|
487
493
|
//Patch this sheetdata
|
|
488
494
|
const realContent = this._childArray.reduce((a, b) => a + b.content, '');
|
|
489
|
-
this.
|
|
495
|
+
this.view.textContent = AbstractStylesheetService.buildPatchedStyleSheet([cssFromString(realContent)]);
|
|
490
496
|
this.instanceServiceContainer.designerCanvas.lazyTriggerReparseDocumentStylesheets();
|
|
491
497
|
}
|
|
492
498
|
else if (this.name == 'link') {
|
|
@@ -11,6 +11,7 @@ import { IPlacementService } from '../services/placementService/IPlacementServic
|
|
|
11
11
|
import { TypedEvent } from '@node-projects/base-custom-webcomponent';
|
|
12
12
|
export interface IDesignItem {
|
|
13
13
|
lastContainerSize: ISize;
|
|
14
|
+
setView(node: Element): any;
|
|
14
15
|
replaceNode(newNode: Node): any;
|
|
15
16
|
nodeReplaced: TypedEvent<void>;
|
|
16
17
|
clone(): Promise<IDesignItem>;
|
|
@@ -8,6 +8,7 @@ export declare class BaseServiceContainer<NameMap> {
|
|
|
8
8
|
getLastService<K extends keyof NameMap>(service: K): NameMap[K];
|
|
9
9
|
getServices<K extends keyof NameMap>(service: K): NameMap[K][];
|
|
10
10
|
register<K extends keyof NameMap>(name: K, service: NameMap[K]): void;
|
|
11
|
+
registerLast<K extends keyof NameMap>(name: K, service: NameMap[K]): void;
|
|
11
12
|
registerMultiple<K extends keyof NameMap>(names: K[], service: NameMap[K]): void;
|
|
12
13
|
forSomeServicesTillResult<K extends keyof NameMap, Y>(service: K, callback: (service: NameMap[K]) => Y): Y;
|
|
13
14
|
getLastServiceWhere<K extends keyof NameMap, Y>(service: K, callback: (service: NameMap[K]) => Y): NameMap[K];
|
|
@@ -17,6 +17,12 @@ export class BaseServiceContainer {
|
|
|
17
17
|
this._services.get(name).push(service);
|
|
18
18
|
this.servicesChanged.emit({ serviceName: name });
|
|
19
19
|
}
|
|
20
|
+
registerLast(name, service) {
|
|
21
|
+
if (!this._services.has(name))
|
|
22
|
+
this._services.set(name, []);
|
|
23
|
+
this._services.get(name).unshift(service);
|
|
24
|
+
this.servicesChanged.emit({ serviceName: name });
|
|
25
|
+
}
|
|
20
26
|
registerMultiple(names, service) {
|
|
21
27
|
for (const name of names) {
|
|
22
28
|
if (!this._services.has(name))
|
|
@@ -20,7 +20,7 @@ export class DefaultPlacementService {
|
|
|
20
20
|
canEnter(container, items) {
|
|
21
21
|
if (!this.isEnterableContainer(container))
|
|
22
22
|
return false;
|
|
23
|
-
if (!items.every(x => !x.element.contains(container.element)))
|
|
23
|
+
if (!items.every(x => !x.element.contains(container.element) && x !== container))
|
|
24
24
|
return false;
|
|
25
25
|
return true;
|
|
26
26
|
}
|
package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.js
CHANGED
|
@@ -178,6 +178,13 @@ export class NativeElementsPropertiesService extends CommonPropertiesService {
|
|
|
178
178
|
case 'br':
|
|
179
179
|
case 'img':
|
|
180
180
|
case 'iframe':
|
|
181
|
+
case 'h1':
|
|
182
|
+
case 'h2':
|
|
183
|
+
case 'h3':
|
|
184
|
+
case 'h4':
|
|
185
|
+
case 'h5':
|
|
186
|
+
case 'h6':
|
|
187
|
+
case 'p':
|
|
181
188
|
return true;
|
|
182
189
|
}
|
|
183
190
|
return false;
|
|
@@ -205,6 +212,14 @@ export class NativeElementsPropertiesService extends CommonPropertiesService {
|
|
|
205
212
|
return this.imgProperties;
|
|
206
213
|
case 'iframe':
|
|
207
214
|
return this.iframeProperties;
|
|
215
|
+
case 'h1':
|
|
216
|
+
case 'h2':
|
|
217
|
+
case 'h3':
|
|
218
|
+
case 'h4':
|
|
219
|
+
case 'h5':
|
|
220
|
+
case 'h6':
|
|
221
|
+
case 'p':
|
|
222
|
+
return [];
|
|
208
223
|
}
|
|
209
224
|
return null;
|
|
210
225
|
}
|
|
@@ -6,7 +6,7 @@ import { AbstractExtensionBase } from "./AbstractExtensionBase.js";
|
|
|
6
6
|
export declare abstract class AbstractExtension extends AbstractExtensionBase implements IDesignerExtension {
|
|
7
7
|
protected extendedItem: IDesignItem;
|
|
8
8
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
|
-
abstract extend(): any;
|
|
10
|
-
abstract refresh(): any;
|
|
9
|
+
abstract extend(cache: Record<string | symbol, any>, event?: Event): any;
|
|
10
|
+
abstract refresh(cache: Record<string | symbol, any>, event?: Event): any;
|
|
11
11
|
abstract dispose(): any;
|
|
12
12
|
}
|
|
@@ -10,7 +10,7 @@ export class AltToEnterContainerExtension extends AbstractExtension {
|
|
|
10
10
|
}
|
|
11
11
|
refresh() {
|
|
12
12
|
let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
13
|
-
this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.
|
|
13
|
+
this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foreground);
|
|
14
14
|
this._text.style.fontSize = (14 / this.designerCanvas.scaleFactor) + 'px';
|
|
15
15
|
this._text.setAttribute('x', '' + (itemRect.x + 5 / this.designerCanvas.scaleFactor));
|
|
16
16
|
this._text.setAttribute('y', '' + (itemRect.y + 12 / this.designerCanvas.scaleFactor));
|
|
@@ -43,7 +43,7 @@ export class EditTextExtension extends AbstractExtension {
|
|
|
43
43
|
foreignObject.setAttribute('width', '96');
|
|
44
44
|
foreignObject.setAttribute('height', '24');
|
|
45
45
|
foreignObject.appendChild(elements);
|
|
46
|
-
this._addOverlay(foreignObject, OverlayLayer.
|
|
46
|
+
this._addOverlay(foreignObject, OverlayLayer.Foreground);
|
|
47
47
|
this.designerCanvas.clickOverlay.style.pointerEvents = 'none';
|
|
48
48
|
this.extendedItem.element.addEventListener('blur', this._blurBound);
|
|
49
49
|
this.extendedItem.element.addEventListener('focus', this._focusBound);
|
|
@@ -14,7 +14,7 @@ export declare class ExtensionManager implements IExtensionManager {
|
|
|
14
14
|
removeExtension(designItem: IDesignItem, extensionType?: ExtensionType): void;
|
|
15
15
|
removeExtensions(designItems: IDesignItem[], recursive: boolean, extensionType?: ExtensionType): void;
|
|
16
16
|
refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType, event?: Event): void;
|
|
17
|
-
refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension): void;
|
|
17
|
+
refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension, timeout?: number): void;
|
|
18
18
|
refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension): void;
|
|
19
19
|
refreshAllAppliedExtentions(): void;
|
|
20
20
|
reapplyAllAppliedExtentions(): void;
|
|
@@ -55,6 +55,7 @@ export class ExtensionManager {
|
|
|
55
55
|
const extProv = this.designerCanvas.serviceContainer.designerExtensions.get(extensionType);
|
|
56
56
|
let extensions = [];
|
|
57
57
|
if (extProv) {
|
|
58
|
+
const cache = {};
|
|
58
59
|
for (let e of extProv) {
|
|
59
60
|
let shouldAppE = designItem.shouldAppliedDesignerExtensions.get(extensionType);
|
|
60
61
|
if (!shouldAppE)
|
|
@@ -67,7 +68,7 @@ export class ExtensionManager {
|
|
|
67
68
|
appE = [];
|
|
68
69
|
const ext = e.getExtension(this, this.designerCanvas, designItem);
|
|
69
70
|
try {
|
|
70
|
-
ext.extend(event);
|
|
71
|
+
ext.extend(cache, event);
|
|
71
72
|
extensions.push(ext);
|
|
72
73
|
}
|
|
73
74
|
catch (err) {
|
|
@@ -89,9 +90,11 @@ export class ExtensionManager {
|
|
|
89
90
|
return null;
|
|
90
91
|
}
|
|
91
92
|
applyExtensions(designItems, extensionType, event, recursive = false) {
|
|
93
|
+
this.designerCanvas.overlayLayer.startBatch();
|
|
92
94
|
if (designItems) {
|
|
93
95
|
const extProv = this.designerCanvas.serviceContainer.designerExtensions.get(extensionType);
|
|
94
96
|
if (extProv) {
|
|
97
|
+
const cache = {};
|
|
95
98
|
for (let e of extProv) {
|
|
96
99
|
for (let i of designItems) {
|
|
97
100
|
let shouldAppE = i.shouldAppliedDesignerExtensions.get(extensionType);
|
|
@@ -105,7 +108,7 @@ export class ExtensionManager {
|
|
|
105
108
|
appE = [];
|
|
106
109
|
const ext = e.getExtension(this, this.designerCanvas, i);
|
|
107
110
|
try {
|
|
108
|
-
ext.extend(event);
|
|
111
|
+
ext.extend(cache, event);
|
|
109
112
|
}
|
|
110
113
|
catch (err) {
|
|
111
114
|
console.error(err);
|
|
@@ -123,6 +126,7 @@ export class ExtensionManager {
|
|
|
123
126
|
}
|
|
124
127
|
}
|
|
125
128
|
}
|
|
129
|
+
this.designerCanvas.overlayLayer.endBatch();
|
|
126
130
|
}
|
|
127
131
|
removeExtension(designItem, extensionType) {
|
|
128
132
|
if (designItem) {
|
|
@@ -211,9 +215,10 @@ export class ExtensionManager {
|
|
|
211
215
|
if (extensionType) {
|
|
212
216
|
let exts = designItem.appliedDesignerExtensions.get(extensionType);
|
|
213
217
|
if (exts) {
|
|
218
|
+
const cache = {};
|
|
214
219
|
for (let e of exts) {
|
|
215
220
|
try {
|
|
216
|
-
e.refresh(event);
|
|
221
|
+
e.refresh(cache, event);
|
|
217
222
|
}
|
|
218
223
|
catch (err) {
|
|
219
224
|
console.error(err);
|
|
@@ -222,10 +227,11 @@ export class ExtensionManager {
|
|
|
222
227
|
}
|
|
223
228
|
}
|
|
224
229
|
else {
|
|
230
|
+
const cache = {};
|
|
225
231
|
for (let appE of designItem.appliedDesignerExtensions) {
|
|
226
232
|
for (let e of appE[1]) {
|
|
227
233
|
try {
|
|
228
|
-
e.refresh(event);
|
|
234
|
+
e.refresh(cache, event);
|
|
229
235
|
}
|
|
230
236
|
catch (err) {
|
|
231
237
|
console.error(err);
|
|
@@ -235,16 +241,24 @@ export class ExtensionManager {
|
|
|
235
241
|
}
|
|
236
242
|
}
|
|
237
243
|
}
|
|
238
|
-
refreshExtensions(designItems, extensionType, event, ignoredExtension) {
|
|
244
|
+
refreshExtensions(designItems, extensionType, event, ignoredExtension, timeout) {
|
|
245
|
+
this.designerCanvas.overlayLayer.startBatch();
|
|
246
|
+
const start = performance.now();
|
|
239
247
|
if (designItems) {
|
|
240
248
|
if (extensionType) {
|
|
241
|
-
|
|
249
|
+
const cache = {};
|
|
250
|
+
outer1: for (let i of designItems) {
|
|
242
251
|
let exts = i.appliedDesignerExtensions.get(extensionType);
|
|
243
252
|
if (exts) {
|
|
244
253
|
for (let e of exts) {
|
|
245
254
|
try {
|
|
246
255
|
if (e != ignoredExtension)
|
|
247
|
-
e.refresh(event);
|
|
256
|
+
e.refresh(cache, event);
|
|
257
|
+
if (timeout) {
|
|
258
|
+
const end = performance.now();
|
|
259
|
+
if (end - start > timeout)
|
|
260
|
+
break outer1;
|
|
261
|
+
}
|
|
248
262
|
}
|
|
249
263
|
catch (err) {
|
|
250
264
|
console.error(err);
|
|
@@ -254,12 +268,19 @@ export class ExtensionManager {
|
|
|
254
268
|
}
|
|
255
269
|
}
|
|
256
270
|
else {
|
|
257
|
-
|
|
271
|
+
const cache = {};
|
|
272
|
+
outer2: for (let i of designItems) {
|
|
258
273
|
for (let appE of i.appliedDesignerExtensions) {
|
|
259
274
|
for (let e of appE[1]) {
|
|
260
275
|
try {
|
|
261
|
-
if (e != ignoredExtension)
|
|
262
|
-
e.refresh(event);
|
|
276
|
+
if (e != ignoredExtension) {
|
|
277
|
+
e.refresh(cache, event);
|
|
278
|
+
if (timeout) {
|
|
279
|
+
const end = performance.now();
|
|
280
|
+
if (end - start > timeout)
|
|
281
|
+
break outer2;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
263
284
|
}
|
|
264
285
|
catch (err) {
|
|
265
286
|
console.error(err);
|
|
@@ -269,8 +290,10 @@ export class ExtensionManager {
|
|
|
269
290
|
}
|
|
270
291
|
}
|
|
271
292
|
}
|
|
293
|
+
this.designerCanvas.overlayLayer.endBatch();
|
|
272
294
|
}
|
|
273
295
|
refreshAllExtensions(designItems, ignoredExtension) {
|
|
296
|
+
this.designerCanvas.overlayLayer.startBatch();
|
|
274
297
|
if (designItems) {
|
|
275
298
|
this.refreshExtensions(designItems, ExtensionType.Permanent, null, ignoredExtension);
|
|
276
299
|
this.refreshExtensions(designItems, ExtensionType.Selection, null, ignoredExtension);
|
|
@@ -286,6 +309,7 @@ export class ExtensionManager {
|
|
|
286
309
|
this.refreshExtensions(designItems, ExtensionType.PrimarySelectionAndCanBeEntered, null, ignoredExtension);
|
|
287
310
|
this.refreshExtensions(designItems, ExtensionType.PrimarySelectionContainerAndCanBeEntered, null, ignoredExtension);
|
|
288
311
|
}
|
|
312
|
+
this.designerCanvas.overlayLayer.endBatch();
|
|
289
313
|
}
|
|
290
314
|
refreshAllAppliedExtentions() {
|
|
291
315
|
this.refreshAllExtensions([...this.designItemsWithExtentions]);
|
|
@@ -293,6 +317,7 @@ export class ExtensionManager {
|
|
|
293
317
|
//todo does not work with permanant, when not applied... maybe we need to do in another way
|
|
294
318
|
//maybe store the "shouldAppliedExtensions??"
|
|
295
319
|
reapplyAllAppliedExtentions() {
|
|
320
|
+
this.designerCanvas.overlayLayer.startBatch();
|
|
296
321
|
for (let d of ExtensionManager.getAllChildElements(this.designerCanvas.rootDesignItem)) {
|
|
297
322
|
const keys = [...d.shouldAppliedDesignerExtensions.keys()];
|
|
298
323
|
for (let e of keys) {
|
|
@@ -300,6 +325,7 @@ export class ExtensionManager {
|
|
|
300
325
|
this.applyExtension(d, e);
|
|
301
326
|
}
|
|
302
327
|
}
|
|
328
|
+
this.designerCanvas.overlayLayer.endBatch();
|
|
303
329
|
}
|
|
304
330
|
static *getAllChildElements(designItem) {
|
|
305
331
|
if (designItem.nodeType == NodeType.Element)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IDisposable } from '../../../../interfaces/IDisposable.js';
|
|
2
2
|
export interface IDesignerExtension extends IDisposable {
|
|
3
|
-
extend(event?: Event): any;
|
|
4
|
-
refresh(event?: Event): any;
|
|
3
|
+
extend(cache: Record<string | symbol, any>, event?: Event): any;
|
|
4
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): any;
|
|
5
5
|
}
|
|
@@ -7,7 +7,7 @@ export interface IExtensionManager {
|
|
|
7
7
|
removeExtension(designItem: IDesignItem, extensionType?: ExtensionType): any;
|
|
8
8
|
removeExtensions(designItems: IDesignItem[], recursive: boolean, extensionType?: ExtensionType): any;
|
|
9
9
|
refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType, event?: Event): any;
|
|
10
|
-
refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event): any;
|
|
10
|
+
refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension, timeout?: number): any;
|
|
11
11
|
refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension): any;
|
|
12
12
|
refreshAllAppliedExtentions(): any;
|
|
13
13
|
reapplyAllAppliedExtentions(): any;
|
|
@@ -2,5 +2,5 @@ export var OverlayLayer;
|
|
|
2
2
|
(function (OverlayLayer) {
|
|
3
3
|
OverlayLayer[OverlayLayer["Background"] = 10] = "Background";
|
|
4
4
|
OverlayLayer[OverlayLayer["Normal"] = 20] = "Normal";
|
|
5
|
-
OverlayLayer[OverlayLayer["
|
|
5
|
+
OverlayLayer[OverlayLayer["Foreground"] = 30] = "Foreground";
|
|
6
6
|
})(OverlayLayer || (OverlayLayer = {}));
|
|
@@ -8,7 +8,7 @@ export declare class SelectionDefaultExtension extends AbstractExtension {
|
|
|
8
8
|
private _line3;
|
|
9
9
|
private _line4;
|
|
10
10
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
11
|
-
extend(): void;
|
|
12
|
-
refresh(): void;
|
|
11
|
+
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
12
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
13
13
|
dispose(): void;
|
|
14
14
|
}
|
|
@@ -9,17 +9,17 @@ export class SelectionDefaultExtension extends AbstractExtension {
|
|
|
9
9
|
constructor(extensionManager, designerView, extendedItem) {
|
|
10
10
|
super(extensionManager, designerView, extendedItem);
|
|
11
11
|
}
|
|
12
|
-
extend() {
|
|
13
|
-
this.refresh();
|
|
12
|
+
extend(cache, event) {
|
|
13
|
+
this.refresh(cache);
|
|
14
14
|
}
|
|
15
|
-
refresh() {
|
|
15
|
+
refresh(cache, event) {
|
|
16
16
|
let transformedCornerPoints;
|
|
17
17
|
if (this.extendedItem.nodeType == NodeType.TextNode) {
|
|
18
18
|
let rect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
19
19
|
transformedCornerPoints = [{ x: rect.x, y: rect.y }, { x: rect.x + rect.width, y: rect.y }, { x: rect.x, y: rect.y + rect.height }, { x: rect.x + rect.width, y: rect.y + rect.height }];
|
|
20
20
|
}
|
|
21
21
|
else
|
|
22
|
-
transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
22
|
+
transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
23
23
|
this._line1 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'svg-selection', this._line1);
|
|
24
24
|
this._line2 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[2].x, transformedCornerPoints[2].y, 'svg-selection', this._line2);
|
|
25
25
|
this._line3 = this._drawLine(transformedCornerPoints[1].x, transformedCornerPoints[1].y, transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'svg-selection', this._line3);
|
|
@@ -11,11 +11,11 @@ export class CursorLinePointerExtension extends AbstractDesignerPointerExtension
|
|
|
11
11
|
_line4;
|
|
12
12
|
refresh(event) {
|
|
13
13
|
let mp = this.designerCanvas.getNormalizedEventCoordinates(event);
|
|
14
|
-
this._circle = this._drawCircle(mp.x, mp.y, 1, 'svg-cursor-line', this._circle, OverlayLayer.
|
|
15
|
-
this._line1 = this._drawLine(mp.x, mp.y - this._lineOffset, mp.x, mp.y - this._lineOffset - this._lineLength, 'svg-cursor-line', this._line1, OverlayLayer.
|
|
16
|
-
this._line2 = this._drawLine(mp.x, mp.y + this._lineOffset, mp.x, mp.y + this._lineOffset + this._lineLength, 'svg-cursor-line', this._line2, OverlayLayer.
|
|
17
|
-
this._line3 = this._drawLine(mp.x - this._lineOffset, mp.y, mp.x - this._lineOffset - this._lineLength, mp.y, 'svg-cursor-line', this._line3, OverlayLayer.
|
|
18
|
-
this._line4 = this._drawLine(mp.x + this._lineOffset, mp.y, mp.x + this._lineOffset + this._lineLength, mp.y, 'svg-cursor-line', this._line4, OverlayLayer.
|
|
14
|
+
this._circle = this._drawCircle(mp.x, mp.y, 1, 'svg-cursor-line', this._circle, OverlayLayer.Foreground);
|
|
15
|
+
this._line1 = this._drawLine(mp.x, mp.y - this._lineOffset, mp.x, mp.y - this._lineOffset - this._lineLength, 'svg-cursor-line', this._line1, OverlayLayer.Foreground);
|
|
16
|
+
this._line2 = this._drawLine(mp.x, mp.y + this._lineOffset, mp.x, mp.y + this._lineOffset + this._lineLength, 'svg-cursor-line', this._line2, OverlayLayer.Foreground);
|
|
17
|
+
this._line3 = this._drawLine(mp.x - this._lineOffset, mp.y, mp.x - this._lineOffset - this._lineLength, mp.y, 'svg-cursor-line', this._line3, OverlayLayer.Foreground);
|
|
18
|
+
this._line4 = this._drawLine(mp.x + this._lineOffset, mp.y, mp.x + this._lineOffset + this._lineLength, mp.y, 'svg-cursor-line', this._line4, OverlayLayer.Foreground);
|
|
19
19
|
}
|
|
20
20
|
dispose() {
|
|
21
21
|
super._removeAllOverlays();
|
|
@@ -14,6 +14,12 @@ export declare class OverlayLayerView extends BaseCustomWebComponentConstructorA
|
|
|
14
14
|
private _id;
|
|
15
15
|
constructor(serviceContainer: ServiceContainer);
|
|
16
16
|
private _initialize;
|
|
17
|
+
backgroundFragment: DocumentFragment;
|
|
18
|
+
foregroundFragment: DocumentFragment;
|
|
19
|
+
normalFragment: DocumentFragment;
|
|
20
|
+
batchCount: number;
|
|
21
|
+
startBatch(): void;
|
|
22
|
+
endBatch(): void;
|
|
17
23
|
addOverlay(overlaySource: string, element: SVGGraphicsElement, overlayLayer?: OverlayLayer): void;
|
|
18
24
|
removeOverlay(element: SVGElement): void;
|
|
19
25
|
removeAllNodesWithClass(className: string): void;
|
|
@@ -59,17 +59,52 @@ export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
59
59
|
}
|
|
60
60
|
this.shadowRoot.adoptedStyleSheets = styles;
|
|
61
61
|
}
|
|
62
|
+
backgroundFragment;
|
|
63
|
+
foregroundFragment;
|
|
64
|
+
normalFragment;
|
|
65
|
+
batchCount = 0;
|
|
66
|
+
startBatch() {
|
|
67
|
+
if (this.batchCount == 0) {
|
|
68
|
+
this.backgroundFragment = document.createDocumentFragment();
|
|
69
|
+
this.foregroundFragment = document.createDocumentFragment();
|
|
70
|
+
this.normalFragment = document.createDocumentFragment();
|
|
71
|
+
}
|
|
72
|
+
this.batchCount++;
|
|
73
|
+
}
|
|
74
|
+
endBatch() {
|
|
75
|
+
this.batchCount--;
|
|
76
|
+
if (this.batchCount == 0) {
|
|
77
|
+
if (this.backgroundFragment.hasChildNodes)
|
|
78
|
+
this._gBackground.appendChild(this.backgroundFragment);
|
|
79
|
+
if (this.foregroundFragment.hasChildNodes)
|
|
80
|
+
this._gForeground.appendChild(this.foregroundFragment);
|
|
81
|
+
if (this.normalFragment.hasChildNodes)
|
|
82
|
+
this._gNormal.appendChild(this.normalFragment);
|
|
83
|
+
this.backgroundFragment = null;
|
|
84
|
+
this.foregroundFragment = null;
|
|
85
|
+
this.normalFragment = null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
62
88
|
addOverlay(overlaySource, element, overlayLayer = OverlayLayer.Normal) {
|
|
63
89
|
element.setAttribute("overlay-source", overlaySource);
|
|
64
90
|
switch (overlayLayer) {
|
|
65
91
|
case OverlayLayer.Background:
|
|
66
|
-
this.
|
|
92
|
+
if (this.backgroundFragment)
|
|
93
|
+
this.backgroundFragment.appendChild(element);
|
|
94
|
+
else
|
|
95
|
+
this._gBackground.appendChild(element);
|
|
67
96
|
break;
|
|
68
|
-
case OverlayLayer.
|
|
69
|
-
this.
|
|
97
|
+
case OverlayLayer.Foreground:
|
|
98
|
+
if (this.foregroundFragment)
|
|
99
|
+
this.foregroundFragment.appendChild(element);
|
|
100
|
+
else
|
|
101
|
+
this._gForeground.appendChild(element);
|
|
70
102
|
break;
|
|
71
103
|
default:
|
|
72
|
-
this.
|
|
104
|
+
if (this.normalFragment)
|
|
105
|
+
this.normalFragment.appendChild(element);
|
|
106
|
+
else
|
|
107
|
+
this._gNormal.appendChild(element);
|
|
73
108
|
break;
|
|
74
109
|
}
|
|
75
110
|
}
|
|
@@ -51,7 +51,7 @@ export class DrawElementTool {
|
|
|
51
51
|
if (!this._rect) {
|
|
52
52
|
designerCanvas.rootDesignItem.element.appendChild(this._createdItem.element);
|
|
53
53
|
this._rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
|
|
54
|
-
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.
|
|
54
|
+
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foreground);
|
|
55
55
|
this._rect.setAttribute('class', 'svg-draw-new-element');
|
|
56
56
|
this._rect.setAttribute('x', (this._startPosition.x - designerCanvas.containerBoundingRect.x));
|
|
57
57
|
this._rect.setAttribute('y', (this._startPosition.y - designerCanvas.containerBoundingRect.y));
|
|
@@ -32,7 +32,7 @@ export class DrawEllipsisTool {
|
|
|
32
32
|
this._path.setAttribute("cy", currentPoint.y.toString());
|
|
33
33
|
this._path.setAttribute("rx", "0");
|
|
34
34
|
this._path.setAttribute("ry", "0");
|
|
35
|
-
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.
|
|
35
|
+
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
|
|
36
36
|
break;
|
|
37
37
|
case EventNames.PointerMove:
|
|
38
38
|
if (this._path) {
|
|
@@ -31,7 +31,7 @@ export class DrawLineTool {
|
|
|
31
31
|
this._path.setAttribute("y1", currentPoint.y.toString());
|
|
32
32
|
this._path.setAttribute("x2", currentPoint.x.toString());
|
|
33
33
|
this._path.setAttribute("y2", currentPoint.y.toString());
|
|
34
|
-
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.
|
|
34
|
+
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
|
|
35
35
|
break;
|
|
36
36
|
case EventNames.PointerMove:
|
|
37
37
|
if (this._path) {
|
|
@@ -35,7 +35,7 @@ export class DrawPathTool {
|
|
|
35
35
|
this._path.setAttribute("stroke", designerCanvas.serviceContainer.globalContext.strokeColor);
|
|
36
36
|
this._path.setAttribute("fill", designerCanvas.serviceContainer.globalContext.fillBrush);
|
|
37
37
|
this._path.setAttribute("stroke-width", designerCanvas.serviceContainer.globalContext.strokeThickness);
|
|
38
|
-
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.
|
|
38
|
+
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
|
|
39
39
|
this._startPoint = currentPoint;
|
|
40
40
|
}
|
|
41
41
|
if (this._lastPoint != null && this._lastPoint.x === currentPoint.x && this._lastPoint.y === currentPoint.y && !this._samePoint) {
|
|
@@ -35,7 +35,7 @@ export class DrawRectTool {
|
|
|
35
35
|
this._path.setAttribute("y", currentPoint.y.toString());
|
|
36
36
|
this._path.setAttribute("width", "0");
|
|
37
37
|
this._path.setAttribute("height", "0");
|
|
38
|
-
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.
|
|
38
|
+
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
|
|
39
39
|
break;
|
|
40
40
|
case EventNames.PointerMove:
|
|
41
41
|
if (this._path) {
|
|
@@ -17,7 +17,7 @@ export class MagicWandSelectorTool {
|
|
|
17
17
|
this._path.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
|
|
18
18
|
this._pathD = "M" + currentPoint.x + " " + currentPoint.y;
|
|
19
19
|
this._path.setAttribute("D", this._pathD);
|
|
20
|
-
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.
|
|
20
|
+
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
|
|
21
21
|
break;
|
|
22
22
|
case EventNames.PointerMove:
|
|
23
23
|
if (this._path) {
|
|
@@ -289,7 +289,7 @@ export class PointerTool {
|
|
|
289
289
|
}
|
|
290
290
|
currentContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, this._actionStartedDesignItems);
|
|
291
291
|
}
|
|
292
|
-
designerCanvas.extensionManager.refreshExtensions(this._actionStartedDesignItems, null, event);
|
|
292
|
+
designerCanvas.extensionManager.refreshExtensions(this._actionStartedDesignItems, null, event, null, 20);
|
|
293
293
|
}
|
|
294
294
|
}
|
|
295
295
|
break;
|
|
@@ -329,7 +329,7 @@ export class PointerTool {
|
|
|
329
329
|
this._dragOverExtensionItem = null;
|
|
330
330
|
this._moveItemsOffset = { x: 0, y: 0 };
|
|
331
331
|
}
|
|
332
|
-
designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements, null, event);
|
|
332
|
+
designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements, null, event, null, 20);
|
|
333
333
|
if (this._changeGroup) {
|
|
334
334
|
this._changeGroup.abort();
|
|
335
335
|
this._changeGroup = null;
|
|
@@ -23,7 +23,7 @@ export class RectangleSelectorTool {
|
|
|
23
23
|
this._rect.setAttribute('height', 0);
|
|
24
24
|
this._rect.style.strokeWidth = '' + (1 / designerCanvas.scaleFactor);
|
|
25
25
|
this._rect.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
|
|
26
|
-
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.
|
|
26
|
+
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foreground);
|
|
27
27
|
break;
|
|
28
28
|
case EventNames.PointerMove:
|
|
29
29
|
if (this._initialPoint) {
|
|
@@ -23,7 +23,7 @@ export class ZoomTool {
|
|
|
23
23
|
this._rect.setAttribute('height', 0);
|
|
24
24
|
this._rect.style.strokeWidth = '' + (1 / designerCanvas.scaleFactor);
|
|
25
25
|
this._rect.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
|
|
26
|
-
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.
|
|
26
|
+
designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foreground);
|
|
27
27
|
break;
|
|
28
28
|
case EventNames.PointerMove:
|
|
29
29
|
if (this._startPoint) {
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export * from "./elements/helper/contextMenu/ContextMenu.js";
|
|
|
14
14
|
export * from "./elements/helper/Helper.js";
|
|
15
15
|
export * from "./elements/helper/SwitchContainerHelper.js";
|
|
16
16
|
export * from "./elements/helper/NpmPackageLoader.js";
|
|
17
|
+
export * from "./elements/helper/LayoutHelper.js";
|
|
17
18
|
export type { IContextMenuItem, IContextMenu } from "./elements/helper/contextMenu/IContextMenuItem.js";
|
|
18
19
|
export * from "./elements/item/DesignItem.js";
|
|
19
20
|
export type { IDesignItem } from "./elements/item/IDesignItem.js";
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,7 @@ export * from "./elements/helper/contextMenu/ContextMenu.js";
|
|
|
13
13
|
export * from "./elements/helper/Helper.js";
|
|
14
14
|
export * from "./elements/helper/SwitchContainerHelper.js";
|
|
15
15
|
export * from "./elements/helper/NpmPackageLoader.js";
|
|
16
|
+
export * from "./elements/helper/LayoutHelper.js";
|
|
16
17
|
export * from "./elements/item/DesignItem.js";
|
|
17
18
|
export * from "./elements/item/BindingMode.js";
|
|
18
19
|
export * from "./elements/item/BindingTarget.js";
|