@node-projects/web-component-designer 0.1.64 → 0.1.70
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 +3 -3
- package/dist/elements/helper/TransformHelper.js +3 -1
- package/dist/elements/item/DesignItem.d.ts +3 -1
- package/dist/elements/item/DesignItem.js +23 -3
- package/dist/elements/item/IDesignItem.d.ts +3 -0
- package/dist/elements/services/dragDropService/DragDropService.js +1 -1
- package/dist/elements/services/stylesheetService/AbstractStylesheetService.d.ts +0 -2
- package/dist/elements/services/stylesheetService/AbstractStylesheetService.js +0 -63
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +1 -0
- package/dist/elements/widgets/designerView/designerCanvas.js +33 -46
- package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +1 -1
- package/dist/elements/widgets/designerView/extensions/CanvasExtension.js +1 -1
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +5 -5
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +5 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleElementExtension.d.ts +3 -2
- package/dist/elements/widgets/designerView/extensions/InvisibleElementExtension.js +9 -5
- package/dist/elements/widgets/designerView/extensions/PositionExtension.js +1 -1
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +4 -4
- package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +1 -1
- package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +1 -1
- package/package.json +1 -1
|
@@ -76,7 +76,7 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
|
|
|
76
76
|
let t = element.style.transform;
|
|
77
77
|
element.style.transform = '';
|
|
78
78
|
const bcEl = element.getBoundingClientRect();
|
|
79
|
-
const bcPar = element.parentElement.getBoundingClientRect();
|
|
79
|
+
const bcPar = element.parentElement ? element.parentElement.getBoundingClientRect() : element.getRootNode().host.getBoundingClientRect();
|
|
80
80
|
element.style.transform = t;
|
|
81
81
|
const currLeft = (bcEl.left - bcPar.left) / zoom;
|
|
82
82
|
const currTop = (bcEl.top - bcPar.top) / zoom;
|
|
@@ -86,7 +86,7 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
|
|
|
86
86
|
const cacheEntry = { offsetLeft: currLeft, offsetTop: currTop };
|
|
87
87
|
lst.push(cacheEntry);
|
|
88
88
|
ch.set(element, cacheEntry);
|
|
89
|
-
element = element.parentElement;
|
|
89
|
+
element = element.parentElement ? element.parentElement : element.getRootNode().host;
|
|
90
90
|
}
|
|
91
91
|
else if (element instanceof SVGGraphicsElement) {
|
|
92
92
|
let bbox = element.getBBox();
|
|
@@ -113,7 +113,7 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
|
|
|
113
113
|
ch.set(element, cacheEntry);
|
|
114
114
|
offsetLeft += element.offsetLeft;
|
|
115
115
|
offsetTop += element.offsetTop;
|
|
116
|
-
element = element.offsetParent;
|
|
116
|
+
element = element.offsetParent ? element.offsetParent : element.getRootNode().host;
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
return { offsetLeft: offsetLeft, offsetTop: offsetTop };
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { getElementsWindowOffsetWithoutSelfAndParentTransformations, getParentElementIncludingSlots } from "./ElementHelper.js";
|
|
2
|
+
//TODO:
|
|
3
|
+
//transform-box
|
|
2
4
|
let identityMatrix = [
|
|
3
5
|
1, 0, 0, 0,
|
|
4
6
|
0, 1, 0, 0,
|
|
@@ -150,7 +152,7 @@ export function getResultingTransformationBetweenElementAndAllAncestors(element,
|
|
|
150
152
|
return originalElementAndAllParentsMultipliedMatrix;
|
|
151
153
|
}
|
|
152
154
|
export function getByParentsTransformedPointRelatedToCanvas(element, point, designerCanvas, cache) {
|
|
153
|
-
const canvas =
|
|
155
|
+
const canvas = designerCanvas.rootDesignItem.node;
|
|
154
156
|
let actualElement = element;
|
|
155
157
|
let parentElementTransformOriginToPointVectorTransformed;
|
|
156
158
|
let byParentTransformedPointRelatedToCanvas = { x: 0, y: 0 };
|
|
@@ -73,6 +73,7 @@ export declare class DesignItem implements IDesignItem {
|
|
|
73
73
|
get lockAtDesignTime(): boolean;
|
|
74
74
|
set lockAtDesignTime(value: boolean);
|
|
75
75
|
static createDesignItemFromInstance(node: Node, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): DesignItem;
|
|
76
|
+
querySelectorAll(selectors: string): NodeListOf<HTMLElement>;
|
|
76
77
|
updateChildrenFromNodesChildren(): void;
|
|
77
78
|
constructor(node: Node, parsedNode: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer);
|
|
78
79
|
setView(node: Element): void;
|
|
@@ -85,7 +86,8 @@ export declare class DesignItem implements IDesignItem {
|
|
|
85
86
|
updateStyleInSheetOrLocal(name: string, value?: string | null, important?: boolean, forceSet?: boolean): void;
|
|
86
87
|
getStyleFromSheetOrLocal(name: string, fallback?: string): string;
|
|
87
88
|
getStyleFromSheetOrLocalOrComputed(name: string, fallback?: string): string;
|
|
88
|
-
|
|
89
|
+
getComputedStyleProperty(name: string, fallback?: string): string;
|
|
90
|
+
getComputedStyle(): CSSStyleDeclaration;
|
|
89
91
|
_stylesCache: IStyleRule[];
|
|
90
92
|
_cacheClearTimer: NodeJS.Timeout;
|
|
91
93
|
getAllStyles(): IStyleRule[];
|
|
@@ -340,6 +340,14 @@ export class DesignItem {
|
|
|
340
340
|
designItem.updateChildrenFromNodesChildren();
|
|
341
341
|
return designItem;
|
|
342
342
|
}
|
|
343
|
+
querySelectorAll(selectors) {
|
|
344
|
+
if (this.isRootItem) {
|
|
345
|
+
return this.node.shadowRoot.querySelectorAll(selectors);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
return this.element.querySelectorAll(selectors);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
343
351
|
updateChildrenFromNodesChildren() {
|
|
344
352
|
this._childArray = [];
|
|
345
353
|
if (this.nodeType == NodeType.Element) {
|
|
@@ -457,7 +465,7 @@ export class DesignItem {
|
|
|
457
465
|
}
|
|
458
466
|
return value ?? fallback;
|
|
459
467
|
}
|
|
460
|
-
|
|
468
|
+
getComputedStyleProperty(name, fallback = null) {
|
|
461
469
|
let nm = name;
|
|
462
470
|
if (!nm.startsWith('--'))
|
|
463
471
|
nm = PropertiesHelper.camelToDashCase(name);
|
|
@@ -467,6 +475,12 @@ export class DesignItem {
|
|
|
467
475
|
}
|
|
468
476
|
return value ?? fallback;
|
|
469
477
|
}
|
|
478
|
+
getComputedStyle() {
|
|
479
|
+
/*if (this.isRootItem) {
|
|
480
|
+
return window.getComputedStyle((<ShadowRoot>this.node).host);
|
|
481
|
+
}*/
|
|
482
|
+
return window.getComputedStyle(this.element);
|
|
483
|
+
}
|
|
470
484
|
_stylesCache = null;
|
|
471
485
|
_cacheClearTimer;
|
|
472
486
|
getAllStyles() {
|
|
@@ -512,7 +526,10 @@ export class DesignItem {
|
|
|
512
526
|
}
|
|
513
527
|
if (index == null || this._childArray.length == 0 || index >= this._childArray.length) {
|
|
514
528
|
this._childArray.push(designItem);
|
|
515
|
-
if (this.
|
|
529
|
+
if (this.isRootItem) {
|
|
530
|
+
this.node.shadowRoot.appendChild(designItem.view);
|
|
531
|
+
}
|
|
532
|
+
else if (this.view instanceof HTMLTemplateElement) {
|
|
516
533
|
this.view.content.appendChild(designItem.view);
|
|
517
534
|
}
|
|
518
535
|
else
|
|
@@ -520,7 +537,10 @@ export class DesignItem {
|
|
|
520
537
|
}
|
|
521
538
|
else {
|
|
522
539
|
let el = this._childArray[index];
|
|
523
|
-
if (this.
|
|
540
|
+
if (this.isRootItem) {
|
|
541
|
+
this.node.shadowRoot.insertBefore(designItem.view, el.element);
|
|
542
|
+
}
|
|
543
|
+
else if (this.view instanceof HTMLTemplateElement) {
|
|
524
544
|
this.view.content.insertBefore(designItem.view, el.element);
|
|
525
545
|
}
|
|
526
546
|
else
|
|
@@ -72,4 +72,7 @@ export interface IDesignItem {
|
|
|
72
72
|
hideAtRunTime: boolean;
|
|
73
73
|
lockAtDesignTime: boolean;
|
|
74
74
|
getPlacementService(style?: CSSStyleDeclaration): IPlacementService;
|
|
75
|
+
getComputedStyleProperty(name: string, fallback: string): string;
|
|
76
|
+
getComputedStyle(): CSSStyleDeclaration;
|
|
77
|
+
querySelectorAll(selectors: string): NodeListOf<HTMLElement>;
|
|
75
78
|
}
|
|
@@ -41,7 +41,7 @@ export class DragDropService {
|
|
|
41
41
|
const di = await designerCanvas.serviceContainer.forSomeServicesTillResult("instanceService", (service) => service.getElement(elementDefinition, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer));
|
|
42
42
|
const grp = di.openGroup("Insert of <" + di.name + ">");
|
|
43
43
|
di.setStyle('position', 'absolute');
|
|
44
|
-
const containerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainer, getComputedStyle(
|
|
44
|
+
const containerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainer, newContainer.getComputedStyle()));
|
|
45
45
|
containerService.enterContainer(newContainer, [di]);
|
|
46
46
|
const containerPos = designerCanvas.getNormalizedElementCoordinates(newContainer.element);
|
|
47
47
|
const evCoord = designerCanvas.getNormalizedEventCoordinates(event);
|
|
@@ -42,6 +42,4 @@ export declare abstract class AbstractStylesheetService implements IStylesheetSe
|
|
|
42
42
|
}>;
|
|
43
43
|
stylesheetsChanged: TypedEvent<void>;
|
|
44
44
|
protected elementMatchesASelector(designItem: IDesignItem, selectors: string[]): boolean;
|
|
45
|
-
static buildPatchedStyleSheet(value: CSSStyleSheet[]): string;
|
|
46
|
-
private static traverseAndCollectRules;
|
|
47
45
|
}
|
|
@@ -89,67 +89,4 @@ export class AbstractStylesheetService {
|
|
|
89
89
|
}
|
|
90
90
|
return false;
|
|
91
91
|
}
|
|
92
|
-
static buildPatchedStyleSheet(value) {
|
|
93
|
-
let style = '';
|
|
94
|
-
for (let s of value) {
|
|
95
|
-
style += this.traverseAndCollectRules(s);
|
|
96
|
-
}
|
|
97
|
-
return style;
|
|
98
|
-
}
|
|
99
|
-
static traverseAndCollectRules(ruleContainer, noPatch = false) {
|
|
100
|
-
let t = '';
|
|
101
|
-
for (let rule of ruleContainer.cssRules) {
|
|
102
|
-
if ((rule instanceof CSSContainerRule
|
|
103
|
-
|| rule instanceof CSSSupportsRule
|
|
104
|
-
|| rule instanceof CSSMediaRule)
|
|
105
|
-
&& rule.cssRules) {
|
|
106
|
-
t += rule.cssText.split(rule.conditionText)[0] + rule.conditionText + " { " + this.traverseAndCollectRules(rule) + " }";
|
|
107
|
-
}
|
|
108
|
-
else if (rule instanceof CSSKeyframesRule
|
|
109
|
-
&& rule.cssRules) {
|
|
110
|
-
t += rule.cssText;
|
|
111
|
-
}
|
|
112
|
-
else if (rule instanceof CSSStyleRule) {
|
|
113
|
-
let sel = "";
|
|
114
|
-
if (!noPatch) {
|
|
115
|
-
let parts = rule.selectorText.split(',');
|
|
116
|
-
for (let p of parts) {
|
|
117
|
-
if (sel)
|
|
118
|
-
sel += ',';
|
|
119
|
-
if (p.startsWith(':host')) {
|
|
120
|
-
sel += p.replace(':host', DesignerCanvas.cssprefixConstant);
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
else if (p == ':root')
|
|
124
|
-
sel += p;
|
|
125
|
-
else if (p.includes(DesignerCanvas.cssprefixConstant)) {
|
|
126
|
-
sel += p;
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
sel += DesignerCanvas.cssprefixConstant + p.trimStart();
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
sel = rule.selectorText;
|
|
134
|
-
}
|
|
135
|
-
t += sel;
|
|
136
|
-
let cssText = rule.style.cssText;
|
|
137
|
-
//bugfix for chrome issue: https://bugs.chromium.org/p/chromium/issues/detail?id=1394353
|
|
138
|
-
if (rule.styleMap && rule.styleMap.get('grid-template') && rule.styleMap.get('grid-template').toString().includes('repeat(')) {
|
|
139
|
-
let entr = rule.styleMap.entries();
|
|
140
|
-
cssText = '';
|
|
141
|
-
for (let e of entr) {
|
|
142
|
-
cssText += e[0] + ':' + e[1].toString() + ';';
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
t += '{' + cssText;
|
|
146
|
-
if (rule.cssRules?.length) {
|
|
147
|
-
const part = this.traverseAndCollectRules(rule, true);
|
|
148
|
-
t += part;
|
|
149
|
-
}
|
|
150
|
-
t += '}';
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return t;
|
|
154
|
-
}
|
|
155
92
|
}
|
|
@@ -51,6 +51,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
51
51
|
onZoomFactorChanged: TypedEvent<number>;
|
|
52
52
|
get canvas(): HTMLElement;
|
|
53
53
|
private _canvas;
|
|
54
|
+
private _canvasShadowRoot;
|
|
54
55
|
private _canvasContainer;
|
|
55
56
|
private _outercanvas2;
|
|
56
57
|
private _lastHoverDesignItem;
|
|
@@ -19,7 +19,6 @@ import { ContextMenu } from '../../helper/contextMenu/ContextMenu.js';
|
|
|
19
19
|
import { NodeType } from '../../item/NodeType.js';
|
|
20
20
|
import { StylesheetChangedAction } from '../../services/undoService/transactionItems/StylesheetChangedAction.js';
|
|
21
21
|
import { SetDesignItemsAction } from '../../services/undoService/transactionItems/SetDesignItemsAction.js';
|
|
22
|
-
import { AbstractStylesheetService } from '../../services/stylesheetService/AbstractStylesheetService.js';
|
|
23
22
|
export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
24
23
|
// Public Properties
|
|
25
24
|
serviceContainer;
|
|
@@ -96,6 +95,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
96
95
|
}
|
|
97
96
|
// Private Variables
|
|
98
97
|
_canvas;
|
|
98
|
+
_canvasShadowRoot;
|
|
99
99
|
_canvasContainer;
|
|
100
100
|
_outercanvas2;
|
|
101
101
|
_lastHoverDesignItem;
|
|
@@ -115,19 +115,14 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
115
115
|
font-weight: inherit;
|
|
116
116
|
font-style: inherit;
|
|
117
117
|
line-height: inherit;
|
|
118
|
+
--node-projects-web-component-designer-background: inherit;
|
|
118
119
|
}
|
|
119
120
|
* {
|
|
120
121
|
touch-action: none;
|
|
121
122
|
}
|
|
122
123
|
#node-projects-designer-canvas-canvas {
|
|
123
|
-
background
|
|
124
|
-
/* 10px grid, using http://www.patternify.com/ */
|
|
125
|
-
//background-image: url(data:image/png;base64,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);
|
|
126
|
-
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAFXmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjIwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIyMCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMjAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjMwMC8xIgogICB0aWZmOllSZXNvbHV0aW9uPSIzMDAvMSIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0xMi0wOFQwOToxNTo0OCswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0xMi0wOFQwOToxNTo0OCswMTowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+QmFja2dyb3VuZGdyaWRfMTBweDwvcmRmOmxpPgogICAgPC9yZGY6QWx0PgogICA8L2RjOnRpdGxlPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS4xMC42IgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTEyLTA4VDA5OjE1OjQ4KzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InIiPz4fvgn+AAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8GjRhRLCiLl7BCftTExmLkV2ExnvJr8+bNvBk1b+b13kiyVbaKEhu/FvwFbJW1UkRKlrImNug5b2ZqJplzO/d87vfec7r3XPCpSd10KnrATGXs8FhImZtfUPwvBKjCTx/Nmu5YUzOjKiXt854yL952ebVKn/vXaqIxR4eyKuEh3bIzwuPCk6sZy+Md4UY9oUWFz4Q7bbmg8J2nR3L86nE8x98e22p4GHz1wkq8iCNFrCdsU1heTpuZXNHz9/FeEoilZmcktoq34BBmjBAKE4wwTJBeBmUO0iX96ZYVJfJ7svnTpCVXl9liDZtl4iTI0CnqilSPSTREj8lIsub1/29fHaO/L1c9EILKZ9d9bwf/Nvxsue7Xkev+HEP5E1ymCvnpQxj4EH2roLUdQN0GnF8VtMguXGxC06Ol2VpWKhf3GQa8nULtPDTcQPVirmf5fU4eQF2Xr7qGvX3okPN1S790cWfsRnax1QAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAC9JREFUOI1jfPr0KQNuICUlhUeWCY8cQTCqeWRoZvz//z8e6WfPntHK5lHNI0MzAMChCNMTuPcnAAAAAElFTkSuQmCC);
|
|
124
|
+
background: var(--node-projects-web-component-designer-background, border-box fixed 0px 0px repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAFXmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjIwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIyMCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMjAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjMwMC8xIgogICB0aWZmOllSZXNvbHV0aW9uPSIzMDAvMSIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0xMi0wOFQwOToxNTo0OCswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0xMi0wOFQwOToxNTo0OCswMTowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+QmFja2dyb3VuZGdyaWRfMTBweDwvcmRmOmxpPgogICAgPC9yZGY6QWx0PgogICA8L2RjOnRpdGxlPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS4xMC42IgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTEyLTA4VDA5OjE1OjQ4KzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InIiPz4fvgn+AAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8GjRhRLCiLl7BCftTExmLkV2ExnvJr8+bNvBk1b+b13kiyVbaKEhu/FvwFbJW1UkRKlrImNug5b2ZqJplzO/d87vfec7r3XPCpSd10KnrATGXs8FhImZtfUPwvBKjCTx/Nmu5YUzOjKiXt854yL952ebVKn/vXaqIxR4eyKuEh3bIzwuPCk6sZy+Md4UY9oUWFz4Q7bbmg8J2nR3L86nE8x98e22p4GHz1wkq8iCNFrCdsU1heTpuZXNHz9/FeEoilZmcktoq34BBmjBAKE4wwTJBeBmUO0iX96ZYVJfJ7svnTpCVXl9liDZtl4iTI0CnqilSPSTREj8lIsub1/29fHaO/L1c9EILKZ9d9bwf/Nvxsue7Xkev+HEP5E1ymCvnpQxj4EH2roLUdQN0GnF8VtMguXGxC06Ol2VpWKhf3GQa8nULtPDTcQPVirmf5fU4eQF2Xr7qGvX3okPN1S790cWfsRnax1QAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAC9JREFUOI1jfPr0KQNuICUlhUeWCY8cQTCqeWRoZvz//z8e6WfPntHK5lHNI0MzAMChCNMTuPcnAAAAAElFTkSuQmCC));
|
|
127
125
|
image-rendering: pixelated;
|
|
128
|
-
background-position: 0px 0px;
|
|
129
|
-
background-attachment: fixed;
|
|
130
|
-
background-origin: -box;
|
|
131
126
|
box-sizing: border-box;
|
|
132
127
|
width: 100%;
|
|
133
128
|
height: 100%;
|
|
@@ -285,6 +280,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
285
280
|
super();
|
|
286
281
|
this._restoreCachedInititalValues();
|
|
287
282
|
this._canvas = this._getDomElement('node-projects-designer-canvas-canvas');
|
|
283
|
+
this._canvasShadowRoot = this._canvas.attachShadow({ mode: 'open' });
|
|
288
284
|
this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
|
|
289
285
|
this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
|
|
290
286
|
this.clickOverlay = this._getDomElement('node-projects-designer-canvas-clickOverlay');
|
|
@@ -337,15 +333,30 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
337
333
|
return this._additionalStyle;
|
|
338
334
|
}
|
|
339
335
|
applyAllStyles() {
|
|
340
|
-
let styles = [
|
|
336
|
+
let styles = [];
|
|
341
337
|
if (this._additionalStyle)
|
|
342
|
-
styles.push(
|
|
338
|
+
styles.push(...this._additionalStyle);
|
|
343
339
|
if (this.instanceServiceContainer.stylesheetService) {
|
|
344
340
|
styles.push(...this.instanceServiceContainer.stylesheetService
|
|
345
341
|
.getStylesheets()
|
|
346
|
-
.map(x => cssFromString(
|
|
342
|
+
.map(x => cssFromString(x.content)));
|
|
347
343
|
}
|
|
348
|
-
|
|
344
|
+
let backgroundSet = false;
|
|
345
|
+
for (const s of styles) {
|
|
346
|
+
for (let r of s.cssRules) {
|
|
347
|
+
if (r instanceof CSSStyleRule) {
|
|
348
|
+
if (r.selectorText.split(',').includes(':host')) {
|
|
349
|
+
if (r.style.background) {
|
|
350
|
+
this._canvas.style.background = r.style.background;
|
|
351
|
+
backgroundSet = true;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
if (!backgroundSet)
|
|
358
|
+
this._canvas.style.background = '';
|
|
359
|
+
this._canvasShadowRoot.adoptedStyleSheets = styles;
|
|
349
360
|
}
|
|
350
361
|
/* --- start IUiCommandHandler --- */
|
|
351
362
|
async executeCommand(command) {
|
|
@@ -431,11 +442,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
431
442
|
}
|
|
432
443
|
}
|
|
433
444
|
disableBackgroud() {
|
|
434
|
-
this._backgroundImage = this._canvas.style.backgroundImage;
|
|
435
445
|
this._canvas.style.backgroundImage = 'none';
|
|
436
446
|
}
|
|
437
447
|
enableBackground() {
|
|
438
|
-
this._canvas.style.backgroundImage =
|
|
448
|
+
this._canvas.style.backgroundImage = 'var(--node-projects-web-component-designer-background)';
|
|
439
449
|
}
|
|
440
450
|
zoomToFit() {
|
|
441
451
|
const autoZomOffset = 10;
|
|
@@ -571,6 +581,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
571
581
|
this.instanceServiceContainer.register("designItemDocumentPositionService", designItemDocumentPositionService(this));
|
|
572
582
|
}
|
|
573
583
|
this.rootDesignItem = DesignItem.GetOrCreateDesignItem(this._canvas, this._canvas, this.serviceContainer, this.instanceServiceContainer);
|
|
584
|
+
//this.rootDesignItem.setView(<any>this._canvasShadowRoot);
|
|
574
585
|
const contentService = this.serviceContainer.getLastService('contentService');
|
|
575
586
|
if (contentService) {
|
|
576
587
|
this.instanceServiceContainer.register("contentService", contentService(this));
|
|
@@ -695,7 +706,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
695
706
|
}
|
|
696
707
|
async reparseDocumentStylesheets() {
|
|
697
708
|
if (this.instanceServiceContainer.stylesheetService) {
|
|
698
|
-
const styleElements = this.rootDesignItem.
|
|
709
|
+
const styleElements = this.rootDesignItem.querySelectorAll('style');
|
|
699
710
|
let i = 1;
|
|
700
711
|
const intStyleSheets = [...styleElements].map(x => ({ name: '<style> #' + (x.id ? x.id + '(' + i++ + ')' : i++), content: DesignItem.GetDesignItem(x).content, designItem: DesignItem.GetDesignItem(x) }));
|
|
701
712
|
await this.instanceServiceContainer.stylesheetService.setDocumentStylesheets(intStyleSheets);
|
|
@@ -852,10 +863,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
852
863
|
let input = this._getDomElement('node-projects-designer-search-input');
|
|
853
864
|
this._getDomElement('node-projects-designer-search-result').innerHTML = "0 selected";
|
|
854
865
|
if (input.value != "") {
|
|
855
|
-
let selectedElements = this.
|
|
866
|
+
let selectedElements = this._canvasShadowRoot.querySelectorAll(input.value);
|
|
856
867
|
let designItems = [];
|
|
857
868
|
for (let i = 0; i <= selectedElements.length; i++) {
|
|
858
|
-
if (this.
|
|
869
|
+
if (this._canvasShadowRoot.contains(selectedElements[i]))
|
|
859
870
|
designItems.push(DesignItem.GetDesignItem(selectedElements[i]));
|
|
860
871
|
}
|
|
861
872
|
if (designItems.length > 0) {
|
|
@@ -978,54 +989,30 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
978
989
|
}
|
|
979
990
|
//TODO: remove
|
|
980
991
|
elementFromPoint(x, y) {
|
|
981
|
-
let elements = this.
|
|
992
|
+
let elements = this._canvasShadowRoot.elementsFromPoint(x, y);
|
|
982
993
|
let element = elements[0];
|
|
983
|
-
if (element === this.clickOverlay)
|
|
984
|
-
element = elements[1];
|
|
985
|
-
if (element === this.clickOverlay)
|
|
986
|
-
element = this._canvas;
|
|
987
994
|
return element;
|
|
988
995
|
}
|
|
989
996
|
elementsFromPoint(x, y) {
|
|
990
997
|
let retVal = [];
|
|
991
|
-
let elements = this.
|
|
998
|
+
let elements = this._canvasShadowRoot.elementsFromPoint(x, y);
|
|
992
999
|
for (let e of elements) {
|
|
993
|
-
if (e
|
|
1000
|
+
if (e.getRootNode() !== this._canvasShadowRoot)
|
|
994
1001
|
continue;
|
|
995
|
-
if (e == this.overlayLayer)
|
|
996
|
-
continue;
|
|
997
|
-
if (e.getRootNode() !== this.shadowRoot)
|
|
998
|
-
continue;
|
|
999
|
-
if (e == this._outercanvas2)
|
|
1000
|
-
break;
|
|
1001
1002
|
retVal.push(e);
|
|
1002
|
-
if (e === this._canvas)
|
|
1003
|
-
break;
|
|
1004
1003
|
}
|
|
1005
1004
|
return retVal;
|
|
1006
1005
|
}
|
|
1007
1006
|
getElementAtPoint(point, ignoreElementCallback) {
|
|
1008
|
-
const elements = this.
|
|
1007
|
+
const elements = this._canvasShadowRoot.elementsFromPoint(point.x, point.y);
|
|
1009
1008
|
let currentElement = null;
|
|
1010
1009
|
for (let i = 0; i < elements.length; i++) {
|
|
1011
1010
|
currentElement = elements[i];
|
|
1012
|
-
if (currentElement == this._outercanvas2) {
|
|
1013
|
-
currentElement = null;
|
|
1014
|
-
break;
|
|
1015
|
-
}
|
|
1016
|
-
if (currentElement == this.clickOverlay) {
|
|
1017
|
-
currentElement = null;
|
|
1018
|
-
continue;
|
|
1019
|
-
}
|
|
1020
|
-
if (currentElement == this.overlayLayer) {
|
|
1021
|
-
currentElement = null;
|
|
1022
|
-
continue;
|
|
1023
|
-
}
|
|
1024
1011
|
if (ignoreElementCallback && ignoreElementCallback(currentElement)) {
|
|
1025
1012
|
currentElement = null;
|
|
1026
1013
|
continue;
|
|
1027
1014
|
}
|
|
1028
|
-
if (currentElement.getRootNode() !== this.
|
|
1015
|
+
if (currentElement.getRootNode() !== this._canvasShadowRoot) {
|
|
1029
1016
|
currentElement = null;
|
|
1030
1017
|
continue;
|
|
1031
1018
|
}
|
|
@@ -9,7 +9,7 @@ export class AltToEnterContainerExtension extends AbstractExtension {
|
|
|
9
9
|
this.refresh();
|
|
10
10
|
}
|
|
11
11
|
refresh() {
|
|
12
|
-
|
|
12
|
+
const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
13
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));
|
|
@@ -4,7 +4,7 @@ export class CanvasExtension extends AbstractExtension {
|
|
|
4
4
|
super(extensionManager, designerView, extendedItem);
|
|
5
5
|
}
|
|
6
6
|
extend() {
|
|
7
|
-
|
|
7
|
+
const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
8
8
|
const computedStyle = getComputedStyle(this.extendedItem.element);
|
|
9
9
|
if (computedStyle.margin !== '0px') {
|
|
10
10
|
const left = Number.parseFloat(computedStyle.marginLeft.replace('px', ''));
|
|
@@ -7,9 +7,9 @@ export declare class ElementDragTitleExtension extends AbstractExtension {
|
|
|
7
7
|
private _text;
|
|
8
8
|
private _width;
|
|
9
9
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
10
|
-
extend(): void;
|
|
10
|
+
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
11
11
|
_drawMoveOverlay(itemRect: DOMRect): void;
|
|
12
|
-
refresh(): void;
|
|
12
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
13
13
|
_pointerEvent(event: PointerEvent): void;
|
|
14
14
|
dispose(): void;
|
|
15
15
|
}
|
|
@@ -10,8 +10,8 @@ export class ElementDragTitleExtension extends AbstractExtension {
|
|
|
10
10
|
constructor(extensionManager, designerView, extendedItem) {
|
|
11
11
|
super(extensionManager, designerView, extendedItem);
|
|
12
12
|
}
|
|
13
|
-
extend() {
|
|
14
|
-
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
13
|
+
extend(cache, event) {
|
|
14
|
+
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
15
15
|
if (!isNaN(transformedCornerPoints[0].x)) {
|
|
16
16
|
const boundRect = this.extendedItem.element.getBoundingClientRect();
|
|
17
17
|
let w = getTextWidth(this.extendedItem.name, '10px monospace');
|
|
@@ -28,13 +28,13 @@ export class ElementDragTitleExtension extends AbstractExtension {
|
|
|
28
28
|
this._rect.addEventListener('pointerdown', (e) => this._pointerEvent(e));
|
|
29
29
|
this._rect.addEventListener('pointermove', (e) => this._pointerEvent(e));
|
|
30
30
|
this._rect.addEventListener('pointerup', (e) => this._pointerEvent(e));
|
|
31
|
-
this.refresh();
|
|
31
|
+
this.refresh(cache, event);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
_drawMoveOverlay(itemRect) {
|
|
35
35
|
}
|
|
36
|
-
refresh() {
|
|
37
|
-
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 16 }, this.designerCanvas);
|
|
36
|
+
refresh(cache, event) {
|
|
37
|
+
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 16 }, this.designerCanvas, cache);
|
|
38
38
|
const angle = Math.atan2((transformedCornerPoints[1].y - transformedCornerPoints[0].y), (transformedCornerPoints[1].x - transformedCornerPoints[0].x)) * 180 / Math.PI;
|
|
39
39
|
const transformedCornerPointsTx = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 5 }, this.designerCanvas);
|
|
40
40
|
if (!isNaN(transformedCornerPoints[0].x)) {
|
|
@@ -7,6 +7,7 @@ export declare class ExtensionManager implements IExtensionManager {
|
|
|
7
7
|
designerCanvas: IDesignerCanvas;
|
|
8
8
|
designItemsWithExtentions: Set<IDesignItem>;
|
|
9
9
|
constructor(designerCanvas: IDesignerCanvas);
|
|
10
|
+
private refreshAllExtensionsTimeout;
|
|
10
11
|
private _contentChanged;
|
|
11
12
|
private _selectedElementsChanged;
|
|
12
13
|
applyExtension(designItem: IDesignItem, extensionType: ExtensionType, event?: Event, recursive?: boolean): IDesignerExtension[];
|
|
@@ -8,6 +8,11 @@ export class ExtensionManager {
|
|
|
8
8
|
this.designerCanvas = designerCanvas;
|
|
9
9
|
designerCanvas.instanceServiceContainer.selectionService.onSelectionChanged.on(this._selectedElementsChanged.bind(this));
|
|
10
10
|
designerCanvas.instanceServiceContainer.contentService.onContentChanged.on(this._contentChanged.bind(this));
|
|
11
|
+
setTimeout(() => this.refreshAllExtensionsTimeout(), 20);
|
|
12
|
+
}
|
|
13
|
+
refreshAllExtensionsTimeout() {
|
|
14
|
+
this.refreshAllAppliedExtentions();
|
|
15
|
+
setTimeout(() => this.refreshAllExtensionsTimeout(), 20);
|
|
11
16
|
}
|
|
12
17
|
_contentChanged(contentChanged) {
|
|
13
18
|
requestAnimationFrame(() => {
|
|
@@ -4,8 +4,9 @@ import { AbstractExtension } from './AbstractExtension.js';
|
|
|
4
4
|
import { IExtensionManager } from './IExtensionManger.js';
|
|
5
5
|
export declare class InvisibleElementExtension extends AbstractExtension {
|
|
6
6
|
private _rect;
|
|
7
|
+
private lastPoints;
|
|
7
8
|
constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, extendedItem: IDesignItem);
|
|
8
|
-
extend(): void;
|
|
9
|
-
refresh(): void;
|
|
9
|
+
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
10
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
10
11
|
dispose(): void;
|
|
11
12
|
}
|
|
@@ -3,15 +3,19 @@ import { AbstractExtension } from './AbstractExtension.js';
|
|
|
3
3
|
import { OverlayLayer } from "./OverlayLayer.js";
|
|
4
4
|
export class InvisibleElementExtension extends AbstractExtension {
|
|
5
5
|
_rect;
|
|
6
|
+
lastPoints;
|
|
6
7
|
constructor(extensionManager, designerCanvas, extendedItem) {
|
|
7
8
|
super(extensionManager, designerCanvas, extendedItem);
|
|
8
9
|
}
|
|
9
|
-
extend() {
|
|
10
|
-
this.refresh();
|
|
10
|
+
extend(cache, event) {
|
|
11
|
+
this.refresh(cache, event);
|
|
11
12
|
}
|
|
12
|
-
refresh() {
|
|
13
|
-
|
|
14
|
-
this.
|
|
13
|
+
refresh(cache, event) {
|
|
14
|
+
const t = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
15
|
+
if (!this.lastPoints || this.lastPoints[0].x != t[0].x || this.lastPoints[0].y != t[0].y || this.lastPoints[1].x != t[1].x || this.lastPoints[1].y != t[1].y || this.lastPoints[2].x != t[2].x || this.lastPoints[2].y != t[2].y || this.lastPoints[3].x != t[3].x || this.lastPoints[3].y != t[3].y) {
|
|
16
|
+
this.lastPoints = t;
|
|
17
|
+
this._rect = this._drawTransformedRect(t, 'svg-invisible-div', this._rect, OverlayLayer.Background);
|
|
18
|
+
}
|
|
15
19
|
}
|
|
16
20
|
dispose() {
|
|
17
21
|
this._removeAllOverlays();
|
|
@@ -14,7 +14,7 @@ export class PositionExtension extends AbstractExtension {
|
|
|
14
14
|
}
|
|
15
15
|
refresh() {
|
|
16
16
|
const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
17
|
-
const itemParentRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element
|
|
17
|
+
const itemParentRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.parent.element);
|
|
18
18
|
this._line1 = this._drawLine(itemParentRect.x, itemRect.y + itemRect.height / 2, itemRect.x, itemRect.y + itemRect.height / 2, 'svg-position', this._line1);
|
|
19
19
|
this._line2 = this._drawLine(itemParentRect.x + itemParentRect.width, itemRect.y + itemRect.height / 2, itemRect.x + itemRect.width, itemRect.y + itemRect.height / 2, 'svg-position', this._line2);
|
|
20
20
|
this._line3 = this._drawLine(itemRect.x + itemRect.width / 2, itemParentRect.y, itemRect.x + itemRect.width / 2, itemRect.y, 'svg-position', this._line3);
|
|
@@ -19,8 +19,8 @@ export declare class ResizeExtension extends AbstractExtension {
|
|
|
19
19
|
private _initialComputedTransformOrigins;
|
|
20
20
|
private _initialTransformOrigins;
|
|
21
21
|
constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, extendedItem: IDesignItem, resizeAllSelected: boolean);
|
|
22
|
-
extend(): void;
|
|
23
|
-
refresh(): void;
|
|
22
|
+
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
23
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
24
24
|
_drawResizerOverlay(x: number, y: number, cursor: string, oldCircle?: SVGCircleElement): SVGCircleElement;
|
|
25
25
|
_pointerActionTypeResize(circle: SVGCircleElement, event: PointerEvent, actionMode: string): void;
|
|
26
26
|
dispose(): void;
|
|
@@ -22,12 +22,12 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
22
22
|
super(extensionManager, designerCanvas, extendedItem);
|
|
23
23
|
this.resizeAllSelected = resizeAllSelected;
|
|
24
24
|
}
|
|
25
|
-
extend() {
|
|
26
|
-
this.refresh();
|
|
25
|
+
extend(cache, event) {
|
|
26
|
+
this.refresh(cache, event);
|
|
27
27
|
}
|
|
28
|
-
refresh() {
|
|
28
|
+
refresh(cache, event) {
|
|
29
29
|
//#region Resizer circles
|
|
30
|
-
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
30
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
31
31
|
this._circle1 = this._drawResizerOverlay(transformedCornerPoints[0].x, transformedCornerPoints[0].y, 'nw-resize', this._circle1);
|
|
32
32
|
this._circle2 = this._drawResizerOverlay((transformedCornerPoints[0].x + (transformedCornerPoints[1].x - transformedCornerPoints[0].x) / 2), (transformedCornerPoints[0].y + (transformedCornerPoints[1].y - transformedCornerPoints[0].y) / 2), 'n-resize', this._circle2);
|
|
33
33
|
this._circle3 = this._drawResizerOverlay(transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'ne-resize', this._circle3);
|
|
@@ -79,6 +79,7 @@ export class DrawEllipsisTool {
|
|
|
79
79
|
this._path.setAttribute("cy", (this._cy - mvY).toString());
|
|
80
80
|
this._path.removeAttribute("stroke");
|
|
81
81
|
this._path.removeAttribute("stroke-width");
|
|
82
|
+
this._path.removeAttribute("overlay-source");
|
|
82
83
|
svg.style.left = (mvX) + 'px';
|
|
83
84
|
svg.style.top = (mvY) + 'px';
|
|
84
85
|
svg.style.position = 'absolute';
|
|
@@ -63,6 +63,7 @@ export class DrawLineTool {
|
|
|
63
63
|
this._path.setAttribute("y2", (this._endPoint.y - mvY).toString());
|
|
64
64
|
this._path.removeAttribute("stroke");
|
|
65
65
|
this._path.removeAttribute("stroke-width");
|
|
66
|
+
this._path.removeAttribute("overlay-source");
|
|
66
67
|
svg.appendChild(this._path);
|
|
67
68
|
svg.style.left = (mvX) + 'px';
|
|
68
69
|
svg.style.top = (mvY) + 'px';
|
|
@@ -105,6 +105,7 @@ export class DrawPathTool {
|
|
|
105
105
|
this._path.setAttribute("d", d);
|
|
106
106
|
this._path.removeAttribute("stroke");
|
|
107
107
|
this._path.removeAttribute("stroke-width");
|
|
108
|
+
this._path.removeAttribute("overlay-source");
|
|
108
109
|
svg.appendChild(this._path);
|
|
109
110
|
svg.style.left = (mvX) + 'px';
|
|
110
111
|
svg.style.top = (mvY) + 'px';
|
|
@@ -93,6 +93,7 @@ export class DrawRectTool {
|
|
|
93
93
|
this._path.setAttribute("y", (this._py - mvY).toString());
|
|
94
94
|
this._path.removeAttribute("stroke");
|
|
95
95
|
this._path.removeAttribute("stroke-width");
|
|
96
|
+
this._path.removeAttribute("overlay-source");
|
|
96
97
|
svg.appendChild(this._path);
|
|
97
98
|
svg.style.left = (mvX) + 'px';
|
|
98
99
|
svg.style.top = (mvY) + 'px';
|
|
@@ -28,7 +28,7 @@ export class MagicWandSelectorTool {
|
|
|
28
28
|
case EventNames.PointerUp:
|
|
29
29
|
event.target.releasePointerCapture(event.pointerId);
|
|
30
30
|
designerCanvas.releaseActiveTool();
|
|
31
|
-
const elements = designerCanvas.rootDesignItem.
|
|
31
|
+
const elements = designerCanvas.rootDesignItem.querySelectorAll('*');
|
|
32
32
|
const inSelectionElements = [];
|
|
33
33
|
let point = designerCanvas.overlayLayer.createPoint();
|
|
34
34
|
for (let e of elements) {
|
|
@@ -50,7 +50,7 @@ export class RectangleSelectorTool {
|
|
|
50
50
|
case EventNames.PointerUp:
|
|
51
51
|
event.target.releasePointerCapture(event.pointerId);
|
|
52
52
|
designerCanvas.releaseActiveTool();
|
|
53
|
-
const elements = designerCanvas.rootDesignItem.
|
|
53
|
+
const elements = designerCanvas.rootDesignItem.querySelectorAll('*');
|
|
54
54
|
let inSelectionElements = [];
|
|
55
55
|
let point = designerCanvas.overlayLayer.createPoint();
|
|
56
56
|
for (let e of elements) {
|