@node-projects/web-component-designer 0.0.80 → 0.0.84
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/PathDataPolyfill.d.ts +11 -10
- package/dist/elements/helper/PathDataPolyfill.js +35 -0
- package/dist/elements/services/DefaultServiceBootstrap.js +12 -5
- 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 +12 -0
- package/dist/elements/services/htmlWriterService/HtmlWriterService copy.js +118 -0
- 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-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 +20 -8
- package/dist/elements/widgets/designerView/designerView.js +25 -7
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.d.ts +14 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +38 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider.js +13 -0
- 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 +1 -2
- package/dist/elements/widgets/designerView/extensions/PathExtension.js +117 -44
- package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension copy.d.ts +13 -0
- package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension copy.js +21 -0
- package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtensionProvider copy.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtensionProvider copy.js +13 -0
- 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/TransformOriginExtension.js +13 -12
- 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 +1 -0
- package/dist/elements/widgets/designerView/tools/DrawLineTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +6 -1
- package/dist/elements/widgets/designerView/tools/DrawRectTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -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 +5 -2
- package/dist/index.js +5 -2
- package/package.json +9 -9
|
@@ -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;
|
|
@@ -0,0 +1,14 @@
|
|
|
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 ElementDragTitleExtension extends AbstractExtension {
|
|
6
|
+
private _rect;
|
|
7
|
+
private _text;
|
|
8
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
|
+
extend(): void;
|
|
10
|
+
_drawMoveOverlay(itemRect: DOMRect): void;
|
|
11
|
+
refresh(): void;
|
|
12
|
+
_pointerEvent(event: PointerEvent): void;
|
|
13
|
+
dispose(): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AbstractExtension } from './AbstractExtension';
|
|
2
|
+
export class ElementDragTitleExtension extends AbstractExtension {
|
|
3
|
+
_rect;
|
|
4
|
+
_text;
|
|
5
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
6
|
+
super(extensionManager, designerView, extendedItem);
|
|
7
|
+
}
|
|
8
|
+
extend() {
|
|
9
|
+
const boundRect = this.extendedItem.element.getBoundingClientRect();
|
|
10
|
+
this._rect = this._drawRect((boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 16, 60, 15, 'svg-primary-selection-move', this._rect);
|
|
11
|
+
this._text = this._drawText(this.extendedItem.name.substring(0, 10) + '…', (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5, 'svg-text-primary', this._text);
|
|
12
|
+
this._rect.addEventListener('pointerdown', (e) => this._pointerEvent(e));
|
|
13
|
+
this._rect.addEventListener('pointermove', (e) => this._pointerEvent(e));
|
|
14
|
+
this._rect.addEventListener('pointerup', (e) => this._pointerEvent(e));
|
|
15
|
+
}
|
|
16
|
+
_drawMoveOverlay(itemRect) {
|
|
17
|
+
}
|
|
18
|
+
refresh() {
|
|
19
|
+
const boundRect = this.extendedItem.element.getBoundingClientRect();
|
|
20
|
+
const xr = (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor;
|
|
21
|
+
const yr = (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 16;
|
|
22
|
+
this._rect.setAttribute('x', xr);
|
|
23
|
+
this._rect.setAttribute('y', yr);
|
|
24
|
+
const x = (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor;
|
|
25
|
+
const y = (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5;
|
|
26
|
+
this._text.setAttribute('x', x);
|
|
27
|
+
this._text.setAttribute('y', y);
|
|
28
|
+
}
|
|
29
|
+
_pointerEvent(event) {
|
|
30
|
+
event.preventDefault();
|
|
31
|
+
event.stopPropagation();
|
|
32
|
+
//@ts-ignore
|
|
33
|
+
this.designerCanvas._pointerEventHandlerBound(event, this.extendedItem.element);
|
|
34
|
+
}
|
|
35
|
+
dispose() {
|
|
36
|
+
this._removeAllOverlays();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
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 ElementDragTitleExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
|
+
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
+
readonly style: CSSStyleSheet;
|
|
10
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ElementDragTitleExtension } from "./ElementDragTitleExtension";
|
|
2
|
+
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
export class ElementDragTitleExtensionProvider {
|
|
4
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
8
|
+
return new ElementDragTitleExtension(extensionManager, designerView, designItem);
|
|
9
|
+
}
|
|
10
|
+
style = css `
|
|
11
|
+
.svg-text-primary { stroke: none; fill: white; stroke-width: 1; font-size: 10px; font-family: monospace; }
|
|
12
|
+
`;
|
|
13
|
+
}
|
|
@@ -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.addEventListener('pointerdown', (e) => this._pointerEvent(e), { capture: true });
|
|
10
|
+
iframe.contentWindow.addEventListener('pointermove', (e) => this._pointerEvent(e), { capture: true });
|
|
11
|
+
iframe.contentWindow.addEventListener('pointerup', (e) => this._pointerEvent(e), { capture: true });
|
|
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;
|
|
@@ -15,10 +15,9 @@ export declare class PathExtension extends AbstractExtension {
|
|
|
15
15
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
16
16
|
extend(): void;
|
|
17
17
|
pointerEvent(event: PointerEvent, circle: SVGCircleElement, p: PathData, index: number): void;
|
|
18
|
-
_drawPath(path: PathData[], index: number): string;
|
|
19
18
|
_drawPathCircle(x: number, y: number, p: PathData, index: number): void;
|
|
20
19
|
_drawPathLine(x1: number, y1: number, x2: number, y2: number): void;
|
|
21
|
-
|
|
20
|
+
_checkCircleIndex(p: PathData, circlePos: IPoint): boolean;
|
|
22
21
|
refresh(): void;
|
|
23
22
|
dispose(): void;
|
|
24
23
|
}
|