@node-projects/web-component-designer 0.1.11 → 0.1.13
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/CssUnitConverter.js +1 -1
- package/dist/elements/helper/ElementHelper.d.ts +1 -1
- package/dist/elements/helper/ElementHelper.js +30 -4
- package/dist/elements/helper/GridHelper.js +1 -2
- package/dist/elements/helper/LayoutHelper.js +2 -2
- package/dist/elements/helper/NpmPackageLoader.js +2 -2
- package/dist/elements/helper/SwitchContainerHelper.js +2 -3
- package/dist/elements/helper/TransformHelper.d.ts +3 -3
- package/dist/elements/helper/TransformHelper.js +39 -12
- package/dist/elements/item/DesignItem.d.ts +3 -1
- package/dist/elements/item/DesignItem.js +12 -6
- 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/bindingsService/SpecialTagsBindingService.js +1 -1
- package/dist/elements/services/dragDropService/DragDropService.js +1 -1
- package/dist/elements/services/elementsService/IElementDefinition.d.ts +0 -6
- package/dist/elements/services/htmlWriterService/HtmlWriterService.js +1 -1
- package/dist/elements/services/instanceService/DefaultInstanceService.js +1 -2
- package/dist/elements/services/placementService/DefaultPlacementService.js +2 -2
- package/dist/elements/services/propertiesService/propertyEditors/special/GridAssignedRowColumnPropertyEditor.js +1 -1
- package/dist/elements/services/propertiesService/propertyEditors/special/MetricsPropertyEditor.js +1 -1
- package/dist/elements/services/propertiesService/services/AbstractPropertiesService.d.ts +4 -3
- package/dist/elements/services/propertiesService/services/AbstractPropertiesService.js +15 -10
- package/dist/elements/services/propertiesService/services/AttributesPropertiesService.js +1 -1
- package/dist/elements/services/propertiesService/services/ContentAndIdPropertiesService.js +1 -1
- package/dist/elements/services/propertiesService/services/CssCurrentPropertiesService.js +1 -1
- package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.js +15 -0
- package/dist/elements/services/stylesheetService/AbstractStylesheetService.js +1 -1
- package/dist/elements/widgets/designerView/DomConverter.js +1 -1
- package/dist/elements/widgets/designerView/designerCanvas.js +1 -1
- 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 +4 -4
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +41 -11
- 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/AbstractDesignerPointerExtension.js +1 -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/TextTool.js +1 -1
- package/dist/elements/widgets/designerView/tools/ZoomTool.js +1 -1
- package/dist/elements/widgets/treeView/treeView.js +1 -1
- package/package.json +1 -1
|
@@ -60,7 +60,7 @@ export class AbstractStylesheetService {
|
|
|
60
60
|
this._allStylesheets.set(s[0], s[1]);
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
//
|
|
63
|
+
//TODO: rename to externalStylesheets
|
|
64
64
|
getStylesheets() {
|
|
65
65
|
let stylesheets = [];
|
|
66
66
|
for (let item of this._stylesheets) {
|
|
@@ -35,7 +35,7 @@ export class DomConverter {
|
|
|
35
35
|
}
|
|
36
36
|
static ConvertToString(designItems, beautifyOutput, updatePositions = false) {
|
|
37
37
|
let itw = beautifyOutput !== false ? new IndentedTextWriter() : new SimpleTextWriter();
|
|
38
|
-
//
|
|
38
|
+
//TODO: check how we could support this beautify here, cause it's now a setting of the writer...
|
|
39
39
|
//let options: HtmlWriterOptions = { beautifyOutput: beautifyOutput !== false, writeDesignerProperties: true, compressCssToShorthandProperties: true, parseJsonInAttributes: true, jsonWriteMode: 'beauty' };
|
|
40
40
|
designItems[0].serviceContainer.htmlWriterService.write(itw, designItems, true, updatePositions);
|
|
41
41
|
return itw.getString();
|
|
@@ -945,7 +945,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
945
945
|
const normEl = this.getNormalizedElementCoordinates(element);
|
|
946
946
|
return { x: normEvt.x - normEl.x, y: normEvt.y - normEl.y };
|
|
947
947
|
}
|
|
948
|
-
//
|
|
948
|
+
//TODO: remove
|
|
949
949
|
elementFromPoint(x, y) {
|
|
950
950
|
let elements = this.shadowRoot.elementsFromPoint(x, y);
|
|
951
951
|
let element = elements[0];
|
|
@@ -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));
|
|
@@ -23,7 +23,7 @@ export class EditTextExtension extends AbstractExtension {
|
|
|
23
23
|
this._focusBound = this._focus.bind(this);
|
|
24
24
|
}
|
|
25
25
|
extend() {
|
|
26
|
-
//
|
|
26
|
+
//TODO: -> check what to do with extensions, do not loose edit on mouse click,...
|
|
27
27
|
//maybe use a html edit framework
|
|
28
28
|
this.extendedItem.instanceServiceContainer.selectionService.clearSelectedElements();
|
|
29
29
|
//this.extensionManager.removeExtension(this.extendedItem, ExtensionType.PrimarySelection);
|
|
@@ -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);
|
|
@@ -66,14 +66,14 @@ export class EditTextExtension extends AbstractExtension {
|
|
|
66
66
|
return p.indexOf(stylo) >= 0;
|
|
67
67
|
}
|
|
68
68
|
_contentEdited() {
|
|
69
|
-
//
|
|
69
|
+
//TODO: -> save???
|
|
70
70
|
//this.extendedItem.content = this.extendedItem.element.innerHTML;
|
|
71
71
|
//console.log(this.extendedItem.element.innerHTML)
|
|
72
72
|
}
|
|
73
73
|
_blur() {
|
|
74
74
|
if (!this._blurTimeout) {
|
|
75
75
|
this._blurTimeout = setTimeout(() => {
|
|
76
|
-
//
|
|
76
|
+
//TODO: don't remove doubleclick extension (another type could be used), remove extension itself
|
|
77
77
|
//maybe also configureable when when to remove the extension
|
|
78
78
|
this.extensionManager.removeExtension(this.extendedItem, ExtensionType.Doubleclick);
|
|
79
79
|
}, 150);
|
|
@@ -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,26 @@ 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
|
+
console.warn("refreshExtensions() took too long, stopped refreshing");
|
|
261
|
+
break outer1;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
248
264
|
}
|
|
249
265
|
catch (err) {
|
|
250
266
|
console.error(err);
|
|
@@ -254,12 +270,21 @@ export class ExtensionManager {
|
|
|
254
270
|
}
|
|
255
271
|
}
|
|
256
272
|
else {
|
|
257
|
-
|
|
273
|
+
const cache = {};
|
|
274
|
+
outer2: for (let i of designItems) {
|
|
258
275
|
for (let appE of i.appliedDesignerExtensions) {
|
|
259
276
|
for (let e of appE[1]) {
|
|
260
277
|
try {
|
|
261
|
-
if (e != ignoredExtension)
|
|
262
|
-
e.refresh(event);
|
|
278
|
+
if (e != ignoredExtension) {
|
|
279
|
+
e.refresh(cache, event);
|
|
280
|
+
if (timeout) {
|
|
281
|
+
const end = performance.now();
|
|
282
|
+
if (end - start > timeout) {
|
|
283
|
+
console.warn("refreshExtensions() took too long, stopped refreshing");
|
|
284
|
+
break outer2;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
263
288
|
}
|
|
264
289
|
catch (err) {
|
|
265
290
|
console.error(err);
|
|
@@ -269,8 +294,10 @@ export class ExtensionManager {
|
|
|
269
294
|
}
|
|
270
295
|
}
|
|
271
296
|
}
|
|
297
|
+
this.designerCanvas.overlayLayer.endBatch();
|
|
272
298
|
}
|
|
273
299
|
refreshAllExtensions(designItems, ignoredExtension) {
|
|
300
|
+
this.designerCanvas.overlayLayer.startBatch();
|
|
274
301
|
if (designItems) {
|
|
275
302
|
this.refreshExtensions(designItems, ExtensionType.Permanent, null, ignoredExtension);
|
|
276
303
|
this.refreshExtensions(designItems, ExtensionType.Selection, null, ignoredExtension);
|
|
@@ -286,13 +313,15 @@ export class ExtensionManager {
|
|
|
286
313
|
this.refreshExtensions(designItems, ExtensionType.PrimarySelectionAndCanBeEntered, null, ignoredExtension);
|
|
287
314
|
this.refreshExtensions(designItems, ExtensionType.PrimarySelectionContainerAndCanBeEntered, null, ignoredExtension);
|
|
288
315
|
}
|
|
316
|
+
this.designerCanvas.overlayLayer.endBatch();
|
|
289
317
|
}
|
|
290
318
|
refreshAllAppliedExtentions() {
|
|
291
319
|
this.refreshAllExtensions([...this.designItemsWithExtentions]);
|
|
292
320
|
}
|
|
293
|
-
//
|
|
321
|
+
//TODO: does not work with permanant, when not applied... maybe we need to do in another way
|
|
294
322
|
//maybe store the "shouldAppliedExtensions??"
|
|
295
323
|
reapplyAllAppliedExtentions() {
|
|
324
|
+
this.designerCanvas.overlayLayer.startBatch();
|
|
296
325
|
for (let d of ExtensionManager.getAllChildElements(this.designerCanvas.rootDesignItem)) {
|
|
297
326
|
const keys = [...d.shouldAppliedDesignerExtensions.keys()];
|
|
298
327
|
for (let e of keys) {
|
|
@@ -300,6 +329,7 @@ export class ExtensionManager {
|
|
|
300
329
|
this.applyExtension(d, e);
|
|
301
330
|
}
|
|
302
331
|
}
|
|
332
|
+
this.designerCanvas.overlayLayer.endBatch();
|
|
303
333
|
}
|
|
304
334
|
static *getAllChildElements(designItem) {
|
|
305
335
|
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);
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { AbstractExtensionBase } from '../AbstractExtensionBase.js';
|
|
2
|
-
//
|
|
3
|
-
//move draw functions to overlay layer
|
|
4
|
-
//implement designerpointerextension
|
|
5
|
-
//create ruler
|
|
2
|
+
//TODO: move draw functions to overlay layer, implement designerpointerextension, create ruler
|
|
6
3
|
export class AbstractDesignerPointerExtension extends AbstractExtensionBase {
|
|
7
4
|
extendedItem;
|
|
8
5
|
constructor(extensionManager, designerCanvas) {
|
|
@@ -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) {
|
|
@@ -28,7 +28,7 @@ export class TextTool {
|
|
|
28
28
|
di.setStyle('left', currentPoint.x + 'px');
|
|
29
29
|
di.setStyle('top', currentPoint.y + 'px');
|
|
30
30
|
designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
|
|
31
|
-
//
|
|
31
|
+
//TODO: Maybe we could also remove the eatEvents property
|
|
32
32
|
//TODO - don't apply doubleclick extension (maybe it is not the doubleclick one) - apply edit text extesion directly
|
|
33
33
|
//should we configure the editTextExtension anywhere??
|
|
34
34
|
this._textEditExtensions = designerCanvas.extensionManager.applyExtension(di, ExtensionType.Doubleclick, event);
|
|
@@ -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) {
|
|
@@ -10,7 +10,7 @@ export class TreeView extends BaseCustomWebComponentLazyAppend {
|
|
|
10
10
|
_contentChangedHandler;
|
|
11
11
|
_mapElementTreeitem;
|
|
12
12
|
_rootItem;
|
|
13
|
-
//TODO
|
|
13
|
+
//TODO: buton so key events can be transfered to designerCanvas (so you can move controls with keys)
|
|
14
14
|
static style = css `
|
|
15
15
|
:host {
|
|
16
16
|
--horz-margin: 20px;
|