@node-projects/web-component-designer 0.0.79 → 0.0.83
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/.github/FUNDING.yml +1 -0
- package/dist/elements/helper/PathDataPolyfill.d.ts +11 -10
- package/dist/elements/helper/PathDataPolyfill.js +36 -1
- package/dist/elements/services/DefaultServiceBootstrap.js +9 -3
- package/dist/elements/services/htmlWriterService/AbstractHtmlWriterService.d.ts +10 -0
- package/dist/elements/services/htmlWriterService/AbstractHtmlWriterService.js +62 -0
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.d.ts +5 -5
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +4 -4
- package/dist/elements/services/htmlWriterService/HtmlWriterService copy.d.ts +4 -14
- package/dist/elements/services/htmlWriterService/HtmlWriterService copy.js +100 -100
- package/dist/elements/services/htmlWriterService/HtmlWriterService.d.ts +6 -6
- package/dist/elements/services/htmlWriterService/HtmlWriterService.js +6 -33
- package/dist/elements/services/htmlWriterService/IHtmlWriterOptions.d.ts +2 -0
- package/dist/elements/services/htmlWriterService/IHtmlWriterOptions.js +5 -3
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +3 -1
- package/dist/elements/widgets/codeView/code-view-ace.js +1 -1
- package/dist/elements/widgets/codeView/code-view-code-mirror.js +1 -1
- package/dist/elements/widgets/designerView/DomConverter.d.ts +3 -3
- package/dist/elements/widgets/designerView/DomConverter.js +7 -4
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -0
- package/dist/elements/widgets/designerView/designerCanvas.js +11 -4
- package/dist/elements/widgets/designerView/designerView.js +25 -7
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +5 -4
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +41 -15
- package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/IframeExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/IframeExtension.js +46 -0
- package/dist/elements/widgets/designerView/extensions/IframeExtensionProvider.d.ts +9 -0
- package/dist/elements/widgets/designerView/extensions/IframeExtensionProvider.js +9 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.js +2 -2
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.js +3 -3
- package/dist/elements/widgets/designerView/extensions/PathExtension.d.ts +2 -1
- package/dist/elements/widgets/designerView/extensions/PathExtension.js +139 -12
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +11 -3
- package/dist/elements/widgets/designerView/extensions/ResizeExtensionProvider.js +2 -1
- package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.js +0 -1
- package/dist/elements/widgets/designerView/extensions/contextMenu/PathContextMenu.d.ts +8 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/PathContextMenu.js +31 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/RectContextMenu.d.ts +8 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/RectContextMenu.js +34 -0
- package/dist/elements/widgets/designerView/tools/DrawElementTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawElementTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/DrawLineTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawLineTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +1 -1
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +18 -9
- package/dist/elements/widgets/designerView/tools/DrawRectTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawRectTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/ITool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/PanTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/PanTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/PickColorTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/PickColorTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/TextTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/TextTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/ZoomTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/ZoomTool.js +1 -0
- package/dist/elements/widgets/treeView/treeViewExtended.js +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/package.json +9 -9
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService copy.d.ts +0 -22
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService copy.js +0 -125
- package/dist/elements/services/htmlWriterService/LitElementWriterService.d.ts +0 -14
- package/dist/elements/services/htmlWriterService/LitElementWriterService.js +0 -123
- package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService copy.d.ts +0 -22
- package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService copy.js +0 -125
- package/dist/elements/services/initializationService/IIntializationService copy.d.ts +0 -4
- package/dist/elements/services/initializationService/IIntializationService copy.js +0 -1
- package/dist/elements/services/manifestLoaders/WebcomponentManifestParserService.d.ts +0 -26
- package/dist/elements/services/manifestLoaders/WebcomponentManifestParserService.js +0 -69
- package/dist/elements/services/webcomponentManifestParserService/WebcomponentManifestParserService.1.d.ts +0 -0
- package/dist/elements/services/webcomponentManifestParserService/WebcomponentManifestParserService.1.js +0 -1
- package/dist/elements/services/webcomponentManifestParserService/webcomponentManifestParserService.d.ts +0 -26
- package/dist/elements/services/webcomponentManifestParserService/webcomponentManifestParserService.js +0 -69
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { IndentedTextWriter } from "../../helper/IndentedTextWriter";
|
|
1
|
+
import { IndentedTextWriter } from "../../helper/IndentedTextWriter.js";
|
|
2
2
|
export class DomConverter {
|
|
3
|
-
static normalizeAttributeValue(value) {
|
|
3
|
+
static normalizeAttributeValue(value, useSingleQuotes = false) {
|
|
4
4
|
if (typeof value === 'number')
|
|
5
5
|
value = value.toString();
|
|
6
|
-
if (value)
|
|
6
|
+
if (value) {
|
|
7
|
+
if (useSingleQuotes)
|
|
8
|
+
return value.replaceAll('\'', ''');
|
|
7
9
|
return value.replaceAll('"', '"');
|
|
10
|
+
}
|
|
8
11
|
return value;
|
|
9
12
|
}
|
|
10
13
|
static normalizeContentValue(value) {
|
|
@@ -31,7 +34,7 @@ export class DomConverter {
|
|
|
31
34
|
}
|
|
32
35
|
static ConvertToString(designItems, designItemsAssignmentList) {
|
|
33
36
|
let itw = new IndentedTextWriter();
|
|
34
|
-
let options = { beautifyOutput: true, writeDesignerProperties: true, compressCssToShorthandProperties: true };
|
|
37
|
+
let options = { beautifyOutput: true, writeDesignerProperties: true, compressCssToShorthandProperties: true, parseJsonInAttributes: true, jsonWriteMode: 'beauty' };
|
|
35
38
|
designItems[0].serviceContainer.htmlWriterService.write(itw, designItems, true, options, designItemsAssignmentList);
|
|
36
39
|
return itw.getString();
|
|
37
40
|
}
|
|
@@ -53,6 +53,8 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
53
53
|
set designerWidth(value: string);
|
|
54
54
|
get designerHeight(): string;
|
|
55
55
|
set designerHeight(value: string);
|
|
56
|
+
get designerOffsetWidth(): number;
|
|
57
|
+
get designerOffsetHeight(): number;
|
|
56
58
|
set additionalStyle(value: CSSStyleSheet);
|
|
57
59
|
executeCommand(command: IUiCommand): Promise<void>;
|
|
58
60
|
canExecuteCommand(command: IUiCommand): boolean;
|
|
@@ -138,10 +138,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
138
138
|
this._canvas = this._getDomElement('node-projects-designer-canvas-canvas');
|
|
139
139
|
this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
|
|
140
140
|
this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
|
|
141
|
-
this.instanceServiceContainer = new InstanceServiceContainer(this);
|
|
142
|
-
this.instanceServiceContainer.register("undoService", new UndoService(this));
|
|
143
|
-
this.instanceServiceContainer.register("selectionService", new SelectionService);
|
|
144
|
-
this.extensionManager = new ExtensionManager(this);
|
|
145
141
|
this._onKeyDownBound = this.onKeyDown.bind(this);
|
|
146
142
|
this._onKeyUpBound = this.onKeyUp.bind(this);
|
|
147
143
|
this._onDblClickBound = this._onDblClick.bind(this);
|
|
@@ -163,6 +159,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
163
159
|
this._canvasContainer.style.height = value;
|
|
164
160
|
this.zoomFactorChanged();
|
|
165
161
|
}
|
|
162
|
+
get designerOffsetWidth() {
|
|
163
|
+
return this._canvasContainer.offsetWidth;
|
|
164
|
+
}
|
|
165
|
+
get designerOffsetHeight() {
|
|
166
|
+
return this._canvasContainer.offsetHeight;
|
|
167
|
+
}
|
|
166
168
|
set additionalStyle(value) {
|
|
167
169
|
if (value) {
|
|
168
170
|
for (let r of value.rules) {
|
|
@@ -301,8 +303,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
301
303
|
}
|
|
302
304
|
initialize(serviceContainer) {
|
|
303
305
|
this.serviceContainer = serviceContainer;
|
|
306
|
+
this.instanceServiceContainer = new InstanceServiceContainer(this);
|
|
307
|
+
this.instanceServiceContainer.register("undoService", new UndoService(this));
|
|
308
|
+
this.instanceServiceContainer.register("selectionService", new SelectionService);
|
|
304
309
|
this.rootDesignItem = DesignItem.GetOrCreateDesignItem(this._canvas, this.serviceContainer, this.instanceServiceContainer);
|
|
305
310
|
this.instanceServiceContainer.register("contentService", new ContentService(this.rootDesignItem));
|
|
311
|
+
this.extensionManager = new ExtensionManager(this);
|
|
306
312
|
this.overlayLayer = new OverlayLayerView(serviceContainer);
|
|
307
313
|
this.overlayLayer.style.pointerEvents = 'none';
|
|
308
314
|
this._canvasContainer.appendChild(this.overlayLayer);
|
|
@@ -358,6 +364,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
358
364
|
this.snapLines.clearSnaplines();
|
|
359
365
|
}
|
|
360
366
|
setDesignItems(designItems) {
|
|
367
|
+
this._fillCalculationrects();
|
|
361
368
|
this.instanceServiceContainer.undoService.clear();
|
|
362
369
|
this.overlayLayer.removeAllOverlays();
|
|
363
370
|
DomHelper.removeAllChildnodes(this.overlayLayer);
|
|
@@ -68,6 +68,7 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
68
68
|
background-color:rgba(164,206,249,.6);
|
|
69
69
|
}
|
|
70
70
|
#outer {
|
|
71
|
+
user-select: none;
|
|
71
72
|
display: flex;
|
|
72
73
|
flex-direction: column;
|
|
73
74
|
width: 100%;
|
|
@@ -201,17 +202,27 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
201
202
|
this._lowertoolbar = this._getDomElement('lowertoolbar');
|
|
202
203
|
this._sVert = this._getDomElement('s-vert');
|
|
203
204
|
this._sHor = this._getDomElement('s-hor');
|
|
204
|
-
this._sVert.addEventListener('scrollbar-input', () => this._onScrollbar());
|
|
205
|
-
this._sHor.addEventListener('scrollbar-input', () => this._onScrollbar());
|
|
205
|
+
this._sVert.addEventListener('scrollbar-input', (e) => this._onScrollbar(e));
|
|
206
|
+
this._sHor.addEventListener('scrollbar-input', (e) => this._onScrollbar(e));
|
|
206
207
|
}
|
|
207
|
-
_onScrollbar() {
|
|
208
|
-
|
|
209
|
-
|
|
208
|
+
_onScrollbar(e) {
|
|
209
|
+
if (e?.detail == 'incrementLarge')
|
|
210
|
+
e.target.value += 0.25;
|
|
211
|
+
else if (e?.detail == 'decrementLarge')
|
|
212
|
+
e.target.value -= 0.25;
|
|
213
|
+
else if (e?.detail == 'incrementSmall')
|
|
214
|
+
e.target.value += 0.05;
|
|
215
|
+
else if (e?.detail == 'decrementSmall')
|
|
216
|
+
e.target.value -= 0.05;
|
|
217
|
+
const w = this.designerCanvas.designerOffsetWidth > this.designerCanvas.offsetWidth ? this.designerCanvas.designerOffsetWidth : this.designerCanvas.offsetWidth;
|
|
218
|
+
const h = this.designerCanvas.designerOffsetHeight > this.designerCanvas.offsetHeight ? this.designerCanvas.designerOffsetHeight : this.designerCanvas.offsetHeight;
|
|
219
|
+
const x = w * (this._sHor.value - 0.5) * -2;
|
|
220
|
+
const y = h * (this._sVert.value - 0.5) * -2;
|
|
210
221
|
this.designerCanvas.canvasOffset = { x, y };
|
|
211
222
|
}
|
|
212
223
|
_onWheel(event) {
|
|
224
|
+
event.preventDefault();
|
|
213
225
|
if (event.ctrlKey) {
|
|
214
|
-
event.preventDefault();
|
|
215
226
|
let zf = this._designerCanvas.zoomFactor;
|
|
216
227
|
zf += event.deltaY * -0.001; //deltamode = 0
|
|
217
228
|
if (zf < 0.02)
|
|
@@ -220,6 +231,11 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
220
231
|
this._zoomInput.value = Math.round(zf * 100) + '%';
|
|
221
232
|
//TODO: we should zoom on the current cursor position, so it stays the center
|
|
222
233
|
}
|
|
234
|
+
else {
|
|
235
|
+
this._sHor.value += event.deltaX / 1000;
|
|
236
|
+
this._sVert.value += event.deltaY / 1000;
|
|
237
|
+
this._onScrollbar(null);
|
|
238
|
+
}
|
|
223
239
|
}
|
|
224
240
|
get designerWidth() {
|
|
225
241
|
return this._designerCanvas.designerWidth;
|
|
@@ -259,7 +275,9 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
259
275
|
}
|
|
260
276
|
getHTML(designItemsAssignmentList) {
|
|
261
277
|
//this.instanceServiceContainer.selectionService.setSelectedElements(null);
|
|
262
|
-
|
|
278
|
+
if (this._designerCanvas.rootDesignItem.childCount > 0)
|
|
279
|
+
return DomConverter.ConvertToString(Array.from(this._designerCanvas.rootDesignItem.children()), designItemsAssignmentList);
|
|
280
|
+
return '';
|
|
263
281
|
}
|
|
264
282
|
async parseHTML(html) {
|
|
265
283
|
const parserService = this.serviceContainer.htmlParserService;
|
|
@@ -3,11 +3,12 @@ import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
|
3
3
|
import { ExtensionType } from './ExtensionType';
|
|
4
4
|
import { IExtensionManager } from "./IExtensionManger";
|
|
5
5
|
export declare class ExtensionManager implements IExtensionManager {
|
|
6
|
-
|
|
7
|
-
constructor(
|
|
6
|
+
designerCanvas: IDesignerCanvas;
|
|
7
|
+
constructor(designerCanvas: IDesignerCanvas);
|
|
8
|
+
private _contentChanged;
|
|
8
9
|
private _selectedElementsChanged;
|
|
9
|
-
applyExtension(designItem: IDesignItem, extensionType: ExtensionType): void;
|
|
10
|
-
applyExtensions(designItems: IDesignItem[], extensionType: ExtensionType): void;
|
|
10
|
+
applyExtension(designItem: IDesignItem, extensionType: ExtensionType, recursive?: boolean): void;
|
|
11
|
+
applyExtensions(designItems: IDesignItem[], extensionType: ExtensionType, recursive?: boolean): void;
|
|
11
12
|
removeExtension(designItem: IDesignItem, extensionType?: ExtensionType): void;
|
|
12
13
|
removeExtensions(designItems: IDesignItem[], extensionType?: ExtensionType): void;
|
|
13
14
|
refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType): void;
|
|
@@ -1,16 +1,32 @@
|
|
|
1
1
|
import { DesignItem } from "../../../item/DesignItem";
|
|
2
2
|
import { ExtensionType } from './ExtensionType';
|
|
3
3
|
export class ExtensionManager {
|
|
4
|
-
|
|
5
|
-
constructor(
|
|
6
|
-
this.
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
designerCanvas;
|
|
5
|
+
constructor(designerCanvas) {
|
|
6
|
+
this.designerCanvas = designerCanvas;
|
|
7
|
+
designerCanvas.instanceServiceContainer.selectionService.onSelectionChanged.on(this._selectedElementsChanged.bind(this));
|
|
8
|
+
designerCanvas.instanceServiceContainer.contentService.onContentChanged.on(this._contentChanged.bind(this));
|
|
9
|
+
}
|
|
10
|
+
_contentChanged(contentChanged) {
|
|
11
|
+
switch (contentChanged.changeType) {
|
|
12
|
+
case 'added':
|
|
13
|
+
this.applyExtensions(contentChanged.designItems, ExtensionType.Permanent, true);
|
|
14
|
+
break;
|
|
15
|
+
case 'moved':
|
|
16
|
+
this.refreshExtensions(contentChanged.designItems, ExtensionType.Permanent);
|
|
17
|
+
break;
|
|
18
|
+
case 'parsed':
|
|
19
|
+
this.applyExtensions(Array.from(this.designerCanvas.rootDesignItem.children()), ExtensionType.Permanent, true);
|
|
20
|
+
break;
|
|
21
|
+
case 'removed':
|
|
22
|
+
this.removeExtensions(contentChanged.designItems, ExtensionType.Permanent);
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
9
25
|
}
|
|
10
26
|
_selectedElementsChanged(selectionChangedEvent) {
|
|
11
27
|
if (selectionChangedEvent.oldSelectedElements && selectionChangedEvent.oldSelectedElements.length) {
|
|
12
28
|
if (selectionChangedEvent.oldSelectedElements[0].parent) {
|
|
13
|
-
const primaryContainer = DesignItem.GetOrCreateDesignItem(selectionChangedEvent.oldSelectedElements[0].parent.element, this.
|
|
29
|
+
const primaryContainer = DesignItem.GetOrCreateDesignItem(selectionChangedEvent.oldSelectedElements[0].parent.element, this.designerCanvas.serviceContainer, this.designerCanvas.instanceServiceContainer);
|
|
14
30
|
this.removeExtension(primaryContainer, ExtensionType.PrimarySelectionContainer);
|
|
15
31
|
this.removeExtension(selectionChangedEvent.oldSelectedElements[0], ExtensionType.PrimarySelection);
|
|
16
32
|
this.removeExtensions(selectionChangedEvent.oldSelectedElements, ExtensionType.Selection);
|
|
@@ -19,21 +35,21 @@ export class ExtensionManager {
|
|
|
19
35
|
if (selectionChangedEvent.selectedElements && selectionChangedEvent.selectedElements.length) {
|
|
20
36
|
this.applyExtensions(selectionChangedEvent.selectedElements, ExtensionType.Selection);
|
|
21
37
|
this.applyExtension(selectionChangedEvent.selectedElements[0], ExtensionType.PrimarySelection);
|
|
22
|
-
const primaryContainer = DesignItem.GetOrCreateDesignItem(selectionChangedEvent.selectedElements[0].parent.element, this.
|
|
38
|
+
const primaryContainer = DesignItem.GetOrCreateDesignItem(selectionChangedEvent.selectedElements[0].parent.element, this.designerCanvas.serviceContainer, this.designerCanvas.instanceServiceContainer);
|
|
23
39
|
this.applyExtension(primaryContainer, ExtensionType.PrimarySelectionContainer);
|
|
24
40
|
}
|
|
25
41
|
this.refreshExtensions(selectionChangedEvent.selectedElements);
|
|
26
42
|
}
|
|
27
|
-
applyExtension(designItem, extensionType) {
|
|
43
|
+
applyExtension(designItem, extensionType, recursive = false) {
|
|
28
44
|
if (designItem) {
|
|
29
|
-
const extProv = this.
|
|
45
|
+
const extProv = this.designerCanvas.serviceContainer.designerExtensions.get(extensionType);
|
|
30
46
|
if (extProv) {
|
|
31
47
|
for (let e of extProv) {
|
|
32
|
-
if (e.shouldExtend(this, this.
|
|
48
|
+
if (e.shouldExtend(this, this.designerCanvas, designItem)) {
|
|
33
49
|
let appE = designItem.appliedDesignerExtensions.get(extensionType);
|
|
34
50
|
if (!appE)
|
|
35
51
|
appE = [];
|
|
36
|
-
const ext = e.getExtension(this, this.
|
|
52
|
+
const ext = e.getExtension(this, this.designerCanvas, designItem);
|
|
37
53
|
try {
|
|
38
54
|
ext.extend();
|
|
39
55
|
}
|
|
@@ -45,19 +61,24 @@ export class ExtensionManager {
|
|
|
45
61
|
}
|
|
46
62
|
}
|
|
47
63
|
}
|
|
64
|
+
if (recursive) {
|
|
65
|
+
for (const d of designItem.children()) {
|
|
66
|
+
this.applyExtension(d, extensionType, recursive);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
48
69
|
}
|
|
49
70
|
}
|
|
50
|
-
applyExtensions(designItems, extensionType) {
|
|
71
|
+
applyExtensions(designItems, extensionType, recursive = false) {
|
|
51
72
|
if (designItems) {
|
|
52
|
-
const extProv = this.
|
|
73
|
+
const extProv = this.designerCanvas.serviceContainer.designerExtensions.get(extensionType);
|
|
53
74
|
if (extProv) {
|
|
54
75
|
for (let e of extProv) {
|
|
55
76
|
for (let i of designItems) {
|
|
56
|
-
if (e.shouldExtend(this, this.
|
|
77
|
+
if (e.shouldExtend(this, this.designerCanvas, i)) {
|
|
57
78
|
let appE = i.appliedDesignerExtensions.get(extensionType);
|
|
58
79
|
if (!appE)
|
|
59
80
|
appE = [];
|
|
60
|
-
const ext = e.getExtension(this, this.
|
|
81
|
+
const ext = e.getExtension(this, this.designerCanvas, i);
|
|
61
82
|
try {
|
|
62
83
|
ext.extend();
|
|
63
84
|
}
|
|
@@ -70,6 +91,11 @@ export class ExtensionManager {
|
|
|
70
91
|
}
|
|
71
92
|
}
|
|
72
93
|
}
|
|
94
|
+
if (recursive) {
|
|
95
|
+
for (const d of designItems) {
|
|
96
|
+
this.applyExtensions(Array.from(d.children()), extensionType, recursive);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
73
99
|
}
|
|
74
100
|
}
|
|
75
101
|
removeExtension(designItem, extensionType) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { IDesignItem } from "../../../item/IDesignItem";
|
|
2
2
|
import { ExtensionType } from './ExtensionType';
|
|
3
3
|
export interface IExtensionManager {
|
|
4
|
-
applyExtension(designItem: IDesignItem, extensionType: ExtensionType): any;
|
|
5
|
-
applyExtensions(designItems: IDesignItem[], extensionType: ExtensionType): any;
|
|
4
|
+
applyExtension(designItem: IDesignItem, extensionType: ExtensionType, recursive?: boolean): any;
|
|
5
|
+
applyExtensions(designItems: IDesignItem[], extensionType: ExtensionType, recursive?: boolean): any;
|
|
6
6
|
removeExtension(designItem: IDesignItem, extensionType?: ExtensionType): any;
|
|
7
7
|
removeExtensions(designItems: IDesignItem[], extensionType?: ExtensionType): any;
|
|
8
8
|
refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType): any;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IDesignItem } from "../../../item/IDesignItem";
|
|
2
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
3
|
+
import { AbstractExtension } from './AbstractExtension';
|
|
4
|
+
import { IExtensionManager } from "./IExtensionManger";
|
|
5
|
+
export declare class IframeExtension extends AbstractExtension {
|
|
6
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
7
|
+
extend(): void;
|
|
8
|
+
_pointerEvent(event: PointerEvent): void;
|
|
9
|
+
refresh(): void;
|
|
10
|
+
dispose(): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { AbstractExtension } from './AbstractExtension';
|
|
2
|
+
export class IframeExtension extends AbstractExtension {
|
|
3
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
4
|
+
super(extensionManager, designerView, extendedItem);
|
|
5
|
+
}
|
|
6
|
+
extend() {
|
|
7
|
+
// forward events to designer, so iframe is selectable via click
|
|
8
|
+
let iframe = this.extendedItem.element;
|
|
9
|
+
iframe.contentWindow.onpointerdown = (e) => this._pointerEvent(e);
|
|
10
|
+
iframe.contentWindow.onpointermove = (e) => this._pointerEvent(e);
|
|
11
|
+
iframe.contentWindow.onpointerup = (e) => this._pointerEvent(e);
|
|
12
|
+
}
|
|
13
|
+
_pointerEvent(event) {
|
|
14
|
+
const rect = this.extendedItem.element.getBoundingClientRect();
|
|
15
|
+
const that = this;
|
|
16
|
+
const handler = {
|
|
17
|
+
get(target, property) {
|
|
18
|
+
switch (property) {
|
|
19
|
+
case 'composedPath':
|
|
20
|
+
return () => [that.extendedItem.element];
|
|
21
|
+
case 'x':
|
|
22
|
+
case 'clientX':
|
|
23
|
+
case 'offsetX':
|
|
24
|
+
case 'pageX':
|
|
25
|
+
return target[property] + rect.x;
|
|
26
|
+
case 'y':
|
|
27
|
+
case 'clientY':
|
|
28
|
+
case 'offsetY':
|
|
29
|
+
case 'pageY':
|
|
30
|
+
return target[property] + rect.y;
|
|
31
|
+
}
|
|
32
|
+
return target[property];
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
event.preventDefault();
|
|
36
|
+
event.stopPropagation();
|
|
37
|
+
const proxy = new Proxy(event, handler);
|
|
38
|
+
//@ts-ignore
|
|
39
|
+
this.designerCanvas._pointerEventHandlerBound(proxy);
|
|
40
|
+
}
|
|
41
|
+
refresh() {
|
|
42
|
+
}
|
|
43
|
+
dispose() {
|
|
44
|
+
this._removeAllOverlays();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from "./IDesignerExtensionProvider";
|
|
2
|
+
import { IDesignItem } from "../../../item/IDesignItem";
|
|
3
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
4
|
+
import { IDesignerExtension } from "./IDesignerExtension";
|
|
5
|
+
import { IExtensionManager } from "./IExtensionManger";
|
|
6
|
+
export declare class IframeExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
|
+
getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IframeExtension } from "./IframeExtension.js";
|
|
2
|
+
export class IframeExtensionProvider {
|
|
3
|
+
shouldExtend(extensionManager, designerCanvas, designItem) {
|
|
4
|
+
return designItem.name == 'iframe';
|
|
5
|
+
}
|
|
6
|
+
getExtension(extensionManager, designerCanvas, designItem) {
|
|
7
|
+
return new IframeExtension(extensionManager, designerCanvas, designItem);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -4,7 +4,7 @@ import { AbstractExtension } from './AbstractExtension';
|
|
|
4
4
|
import { IExtensionManager } from "./IExtensionManger";
|
|
5
5
|
export declare class InvisibleDivExtension extends AbstractExtension {
|
|
6
6
|
private _rect;
|
|
7
|
-
constructor(extensionManager: IExtensionManager,
|
|
7
|
+
constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, extendedItem: IDesignItem);
|
|
8
8
|
extend(): void;
|
|
9
9
|
refresh(): void;
|
|
10
10
|
dispose(): void;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AbstractExtension } from './AbstractExtension';
|
|
2
2
|
export class InvisibleDivExtension extends AbstractExtension {
|
|
3
3
|
_rect;
|
|
4
|
-
constructor(extensionManager,
|
|
5
|
-
super(extensionManager,
|
|
4
|
+
constructor(extensionManager, designerCanvas, extendedItem) {
|
|
5
|
+
super(extensionManager, designerCanvas, extendedItem);
|
|
6
6
|
}
|
|
7
7
|
extend() {
|
|
8
8
|
this.refresh();
|
|
@@ -4,7 +4,7 @@ import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
|
4
4
|
import { IDesignerExtension } from "./IDesignerExtension";
|
|
5
5
|
import { IExtensionManager } from "./IExtensionManger";
|
|
6
6
|
export declare class InvisibleDivExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
-
shouldExtend(extensionManager: IExtensionManager,
|
|
8
|
-
getExtension(extensionManager: IExtensionManager,
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
|
+
getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
9
|
readonly style: CSSStyleSheet;
|
|
10
10
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { InvisibleDivExtension } from "./InvisibleDivExtension";
|
|
2
2
|
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
3
|
export class InvisibleDivExtensionProvider {
|
|
4
|
-
shouldExtend(extensionManager,
|
|
4
|
+
shouldExtend(extensionManager, designerCanvas, designItem) {
|
|
5
5
|
if (designItem.name == 'div') {
|
|
6
6
|
const st = window.getComputedStyle(designItem.element);
|
|
7
7
|
return st.backgroundColor == 'rgba(0, 0, 0, 0)' && st.borderStyle == 'none';
|
|
8
8
|
}
|
|
9
9
|
return false;
|
|
10
10
|
}
|
|
11
|
-
getExtension(extensionManager,
|
|
12
|
-
return new InvisibleDivExtension(extensionManager,
|
|
11
|
+
getExtension(extensionManager, designerCanvas, designItem) {
|
|
12
|
+
return new InvisibleDivExtension(extensionManager, designerCanvas, designItem);
|
|
13
13
|
}
|
|
14
14
|
style = css `
|
|
15
15
|
.svg-invisible-div { stroke: lightgray; fill: transparent; stroke-width: 1;
|
|
@@ -2,6 +2,7 @@ import { IDesignItem } from "../../../item/IDesignItem";
|
|
|
2
2
|
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
3
3
|
import { AbstractExtension } from "./AbstractExtension";
|
|
4
4
|
import "../../../helper/PathDataPolyfill";
|
|
5
|
+
import { IPoint } from "../../../../interfaces/IPoint";
|
|
5
6
|
import { IExtensionManager } from "./IExtensionManger";
|
|
6
7
|
import { PathData } from "../../../helper/PathDataPolyfill";
|
|
7
8
|
export declare class PathExtension extends AbstractExtension {
|
|
@@ -14,9 +15,9 @@ export declare class PathExtension extends AbstractExtension {
|
|
|
14
15
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
15
16
|
extend(): void;
|
|
16
17
|
pointerEvent(event: PointerEvent, circle: SVGCircleElement, p: PathData, index: number): void;
|
|
17
|
-
_drawPath(path: PathData[], index: number): void;
|
|
18
18
|
_drawPathCircle(x: number, y: number, p: PathData, index: number): void;
|
|
19
19
|
_drawPathLine(x1: number, y1: number, x2: number, y2: number): void;
|
|
20
|
+
_checkCircleIndex(p: PathData, circlePos: IPoint): boolean;
|
|
20
21
|
refresh(): void;
|
|
21
22
|
dispose(): void;
|
|
22
23
|
}
|