@node-projects/web-component-designer 0.1.64 → 0.1.71
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 +21 -47
- 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,16 @@ 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
|
}
|
|
123
|
+
#node-projects-designer-canvas-canvasContainer {
|
|
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));
|
|
125
|
+
}
|
|
122
126
|
#node-projects-designer-canvas-canvas {
|
|
123
|
-
background-color: var(--canvas-background, white);
|
|
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);
|
|
127
127
|
image-rendering: pixelated;
|
|
128
|
-
background-position: 0px 0px;
|
|
129
|
-
background-attachment: fixed;
|
|
130
|
-
background-origin: -box;
|
|
131
128
|
box-sizing: border-box;
|
|
132
129
|
width: 100%;
|
|
133
130
|
height: 100%;
|
|
@@ -285,6 +282,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
285
282
|
super();
|
|
286
283
|
this._restoreCachedInititalValues();
|
|
287
284
|
this._canvas = this._getDomElement('node-projects-designer-canvas-canvas');
|
|
285
|
+
this._canvasShadowRoot = this._canvas.attachShadow({ mode: 'open' });
|
|
288
286
|
this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
|
|
289
287
|
this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
|
|
290
288
|
this.clickOverlay = this._getDomElement('node-projects-designer-canvas-clickOverlay');
|
|
@@ -337,15 +335,15 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
337
335
|
return this._additionalStyle;
|
|
338
336
|
}
|
|
339
337
|
applyAllStyles() {
|
|
340
|
-
let styles = [
|
|
338
|
+
let styles = [];
|
|
341
339
|
if (this._additionalStyle)
|
|
342
|
-
styles.push(
|
|
340
|
+
styles.push(...this._additionalStyle);
|
|
343
341
|
if (this.instanceServiceContainer.stylesheetService) {
|
|
344
342
|
styles.push(...this.instanceServiceContainer.stylesheetService
|
|
345
343
|
.getStylesheets()
|
|
346
|
-
.map(x => cssFromString(
|
|
344
|
+
.map(x => cssFromString(x.content)));
|
|
347
345
|
}
|
|
348
|
-
this.
|
|
346
|
+
this._canvasShadowRoot.adoptedStyleSheets = styles;
|
|
349
347
|
}
|
|
350
348
|
/* --- start IUiCommandHandler --- */
|
|
351
349
|
async executeCommand(command) {
|
|
@@ -431,11 +429,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
431
429
|
}
|
|
432
430
|
}
|
|
433
431
|
disableBackgroud() {
|
|
434
|
-
this.
|
|
435
|
-
this._canvas.style.backgroundImage = 'none';
|
|
432
|
+
this._canvasContainer.style.backgroundImage = 'none';
|
|
436
433
|
}
|
|
437
434
|
enableBackground() {
|
|
438
|
-
this.
|
|
435
|
+
this._canvasContainer.style.backgroundImage = 'var(--node-projects-web-component-designer-background)';
|
|
439
436
|
}
|
|
440
437
|
zoomToFit() {
|
|
441
438
|
const autoZomOffset = 10;
|
|
@@ -571,6 +568,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
571
568
|
this.instanceServiceContainer.register("designItemDocumentPositionService", designItemDocumentPositionService(this));
|
|
572
569
|
}
|
|
573
570
|
this.rootDesignItem = DesignItem.GetOrCreateDesignItem(this._canvas, this._canvas, this.serviceContainer, this.instanceServiceContainer);
|
|
571
|
+
//this.rootDesignItem.setView(<any>this._canvasShadowRoot);
|
|
574
572
|
const contentService = this.serviceContainer.getLastService('contentService');
|
|
575
573
|
if (contentService) {
|
|
576
574
|
this.instanceServiceContainer.register("contentService", contentService(this));
|
|
@@ -695,7 +693,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
695
693
|
}
|
|
696
694
|
async reparseDocumentStylesheets() {
|
|
697
695
|
if (this.instanceServiceContainer.stylesheetService) {
|
|
698
|
-
const styleElements = this.rootDesignItem.
|
|
696
|
+
const styleElements = this.rootDesignItem.querySelectorAll('style');
|
|
699
697
|
let i = 1;
|
|
700
698
|
const intStyleSheets = [...styleElements].map(x => ({ name: '<style> #' + (x.id ? x.id + '(' + i++ + ')' : i++), content: DesignItem.GetDesignItem(x).content, designItem: DesignItem.GetDesignItem(x) }));
|
|
701
699
|
await this.instanceServiceContainer.stylesheetService.setDocumentStylesheets(intStyleSheets);
|
|
@@ -852,10 +850,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
852
850
|
let input = this._getDomElement('node-projects-designer-search-input');
|
|
853
851
|
this._getDomElement('node-projects-designer-search-result').innerHTML = "0 selected";
|
|
854
852
|
if (input.value != "") {
|
|
855
|
-
let selectedElements = this.
|
|
853
|
+
let selectedElements = this._canvasShadowRoot.querySelectorAll(input.value);
|
|
856
854
|
let designItems = [];
|
|
857
855
|
for (let i = 0; i <= selectedElements.length; i++) {
|
|
858
|
-
if (this.
|
|
856
|
+
if (this._canvasShadowRoot.contains(selectedElements[i]))
|
|
859
857
|
designItems.push(DesignItem.GetDesignItem(selectedElements[i]));
|
|
860
858
|
}
|
|
861
859
|
if (designItems.length > 0) {
|
|
@@ -978,54 +976,30 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
978
976
|
}
|
|
979
977
|
//TODO: remove
|
|
980
978
|
elementFromPoint(x, y) {
|
|
981
|
-
let elements = this.
|
|
979
|
+
let elements = this._canvasShadowRoot.elementsFromPoint(x, y);
|
|
982
980
|
let element = elements[0];
|
|
983
|
-
if (element === this.clickOverlay)
|
|
984
|
-
element = elements[1];
|
|
985
|
-
if (element === this.clickOverlay)
|
|
986
|
-
element = this._canvas;
|
|
987
981
|
return element;
|
|
988
982
|
}
|
|
989
983
|
elementsFromPoint(x, y) {
|
|
990
984
|
let retVal = [];
|
|
991
|
-
let elements = this.
|
|
985
|
+
let elements = this._canvasShadowRoot.elementsFromPoint(x, y);
|
|
992
986
|
for (let e of elements) {
|
|
993
|
-
if (e
|
|
994
|
-
continue;
|
|
995
|
-
if (e == this.overlayLayer)
|
|
987
|
+
if (e.getRootNode() !== this._canvasShadowRoot)
|
|
996
988
|
continue;
|
|
997
|
-
if (e.getRootNode() !== this.shadowRoot)
|
|
998
|
-
continue;
|
|
999
|
-
if (e == this._outercanvas2)
|
|
1000
|
-
break;
|
|
1001
989
|
retVal.push(e);
|
|
1002
|
-
if (e === this._canvas)
|
|
1003
|
-
break;
|
|
1004
990
|
}
|
|
1005
991
|
return retVal;
|
|
1006
992
|
}
|
|
1007
993
|
getElementAtPoint(point, ignoreElementCallback) {
|
|
1008
|
-
const elements = this.
|
|
994
|
+
const elements = this._canvasShadowRoot.elementsFromPoint(point.x, point.y);
|
|
1009
995
|
let currentElement = null;
|
|
1010
996
|
for (let i = 0; i < elements.length; i++) {
|
|
1011
997
|
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
998
|
if (ignoreElementCallback && ignoreElementCallback(currentElement)) {
|
|
1025
999
|
currentElement = null;
|
|
1026
1000
|
continue;
|
|
1027
1001
|
}
|
|
1028
|
-
if (currentElement.getRootNode() !== this.
|
|
1002
|
+
if (currentElement.getRootNode() !== this._canvasShadowRoot) {
|
|
1029
1003
|
currentElement = null;
|
|
1030
1004
|
continue;
|
|
1031
1005
|
}
|
|
@@ -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) {
|