@node-projects/web-component-designer 0.0.82 → 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/dist/elements/services/DefaultServiceBootstrap.js +4 -2
- package/dist/elements/widgets/codeView/code-view-code-mirror.js +1 -1
- package/dist/elements/widgets/designerView/designerCanvas.js +5 -4
- package/dist/elements/widgets/designerView/designerView.js +4 -1
- 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 -0
- package/dist/elements/widgets/designerView/extensions/PathExtension.js +42 -7
- 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/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 +1 -0
- 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/package.json +3 -3
|
@@ -54,6 +54,7 @@ import { DrawLineTool } from '../widgets/designerView/tools/DrawLineTool.js';
|
|
|
54
54
|
import { HtmlWriterService } from './htmlWriterService/HtmlWriterService.js';
|
|
55
55
|
import { RectContextMenu } from '../widgets/designerView/extensions/contextMenu/RectContextMenu.js';
|
|
56
56
|
import { PathContextMenu } from '../widgets/designerView/extensions/contextMenu/PathContextMenu.js';
|
|
57
|
+
import { IframeExtensionProvider } from '../widgets/designerView/extensions/IframeExtensionProvider.js';
|
|
57
58
|
export function createDefaultServiceContainer() {
|
|
58
59
|
let serviceContainer = new ServiceContainer();
|
|
59
60
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -76,8 +77,9 @@ export function createDefaultServiceContainer() {
|
|
|
76
77
|
serviceContainer.register("modelCommandService", new DefaultModelCommandService());
|
|
77
78
|
serviceContainer.register("demoProviderService", new DemoProviderService());
|
|
78
79
|
serviceContainer.designerExtensions.set(ExtensionType.Permanent, [
|
|
79
|
-
new ResizeExtensionProvider(false),
|
|
80
|
-
new InvisibleDivExtensionProvider()
|
|
80
|
+
// new ResizeExtensionProvider(false),
|
|
81
|
+
new InvisibleDivExtensionProvider(),
|
|
82
|
+
new IframeExtensionProvider()
|
|
81
83
|
]);
|
|
82
84
|
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
|
|
83
85
|
new PrimarySelectionDefaultExtensionProvider(),
|
|
@@ -20,7 +20,7 @@ export class CodeViewCodeMirror extends BaseCustomWebComponentLazyAppend {
|
|
|
20
20
|
constructor() {
|
|
21
21
|
super();
|
|
22
22
|
//@ts-ignore
|
|
23
|
-
import("
|
|
23
|
+
import("./codemirror/lib/codemirror.css", { assert: { type: 'css' } }).then(x => this.shadowRoot.adoptedStyleSheets = [x.default, this.constructor.style]);
|
|
24
24
|
this.style.display = 'block';
|
|
25
25
|
this._editor = this._getDomElement('textarea');
|
|
26
26
|
}
|
|
@@ -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);
|
|
@@ -307,8 +303,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
307
303
|
}
|
|
308
304
|
initialize(serviceContainer) {
|
|
309
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);
|
|
310
309
|
this.rootDesignItem = DesignItem.GetOrCreateDesignItem(this._canvas, this.serviceContainer, this.instanceServiceContainer);
|
|
311
310
|
this.instanceServiceContainer.register("contentService", new ContentService(this.rootDesignItem));
|
|
311
|
+
this.extensionManager = new ExtensionManager(this);
|
|
312
312
|
this.overlayLayer = new OverlayLayerView(serviceContainer);
|
|
313
313
|
this.overlayLayer.style.pointerEvents = 'none';
|
|
314
314
|
this._canvasContainer.appendChild(this.overlayLayer);
|
|
@@ -364,6 +364,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
364
364
|
this.snapLines.clearSnaplines();
|
|
365
365
|
}
|
|
366
366
|
setDesignItems(designItems) {
|
|
367
|
+
this._fillCalculationrects();
|
|
367
368
|
this.instanceServiceContainer.undoService.clear();
|
|
368
369
|
this.overlayLayer.removeAllOverlays();
|
|
369
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%;
|
|
@@ -274,7 +275,9 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
274
275
|
}
|
|
275
276
|
getHTML(designItemsAssignmentList) {
|
|
276
277
|
//this.instanceServiceContainer.selectionService.setSelectedElements(null);
|
|
277
|
-
|
|
278
|
+
if (this._designerCanvas.rootDesignItem.childCount > 0)
|
|
279
|
+
return DomConverter.ConvertToString(Array.from(this._designerCanvas.rootDesignItem.children()), designItemsAssignmentList);
|
|
280
|
+
return '';
|
|
278
281
|
}
|
|
279
282
|
async parseHTML(html) {
|
|
280
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 {
|
|
@@ -16,6 +17,7 @@ export declare class PathExtension extends AbstractExtension {
|
|
|
16
17
|
pointerEvent(event: PointerEvent, circle: SVGCircleElement, p: PathData, index: number): void;
|
|
17
18
|
_drawPathCircle(x: number, y: number, p: PathData, index: number): void;
|
|
18
19
|
_drawPathLine(x1: number, y1: number, x2: number, y2: number): void;
|
|
20
|
+
_checkCircleIndex(p: PathData, circlePos: IPoint): boolean;
|
|
19
21
|
refresh(): void;
|
|
20
22
|
dispose(): void;
|
|
21
23
|
}
|
|
@@ -125,6 +125,8 @@ export class PathExtension extends AbstractExtension {
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
_drawPathCircle(x, y, p, index) {
|
|
128
|
+
let circle = this._drawCircle(this._parentRect.x - this.designerCanvas.containerBoundingRect.x + x, this._parentRect.y - this.designerCanvas.containerBoundingRect.y + y, 5, 'svg-path');
|
|
129
|
+
let circlePos = { x: x, y: y };
|
|
128
130
|
const items = [];
|
|
129
131
|
const pidx = this._pathdata.indexOf(p);
|
|
130
132
|
items.push({
|
|
@@ -142,11 +144,19 @@ export class PathExtension extends AbstractExtension {
|
|
|
142
144
|
this.extendedItem.setAttribute('d', createPathD(this._pathdata));
|
|
143
145
|
}
|
|
144
146
|
});
|
|
145
|
-
if (pidx != 0) {
|
|
147
|
+
if (pidx != 0 && this._checkCircleIndex(p, circlePos)) {
|
|
146
148
|
items.push({
|
|
147
149
|
title: 'convert to quadratic bézier', action: () => {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
+
let p1x = this._pathdata[pidx - 1].values[0];
|
|
151
|
+
let p1y = this._pathdata[pidx - 1].values[1];
|
|
152
|
+
if (this._pathdata[pidx - 1].type === 'C') {
|
|
153
|
+
p1x = this._pathdata[pidx - 1].values[4];
|
|
154
|
+
p1y = this._pathdata[pidx - 1].values[5];
|
|
155
|
+
}
|
|
156
|
+
else if (this._pathdata[pidx - 1].type === 'Q') {
|
|
157
|
+
p1x = this._pathdata[pidx - 1].values[2];
|
|
158
|
+
p1y = this._pathdata[pidx - 1].values[3];
|
|
159
|
+
}
|
|
150
160
|
const p2x = this._pathdata[pidx].values[0];
|
|
151
161
|
const p2y = this._pathdata[pidx].values[1];
|
|
152
162
|
const mpx = (p2x + p1x) * 0.5;
|
|
@@ -164,11 +174,19 @@ export class PathExtension extends AbstractExtension {
|
|
|
164
174
|
}
|
|
165
175
|
});
|
|
166
176
|
}
|
|
167
|
-
if (pidx != 0) {
|
|
177
|
+
if (pidx != 0 && this._checkCircleIndex(p, circlePos)) {
|
|
168
178
|
items.push({
|
|
169
179
|
title: 'convert to cubic bézier', action: () => {
|
|
170
|
-
|
|
171
|
-
|
|
180
|
+
let p1x = this._pathdata[pidx - 1].values[0];
|
|
181
|
+
let p1y = this._pathdata[pidx - 1].values[1];
|
|
182
|
+
if (this._pathdata[pidx - 1].type === 'C') {
|
|
183
|
+
p1x = this._pathdata[pidx - 1].values[4];
|
|
184
|
+
p1y = this._pathdata[pidx - 1].values[5];
|
|
185
|
+
}
|
|
186
|
+
else if (this._pathdata[pidx - 1].type === 'Q') {
|
|
187
|
+
p1x = this._pathdata[pidx - 1].values[2];
|
|
188
|
+
p1y = this._pathdata[pidx - 1].values[3];
|
|
189
|
+
}
|
|
172
190
|
const p2x = this._pathdata[pidx].values[0];
|
|
173
191
|
const p2y = this._pathdata[pidx].values[1];
|
|
174
192
|
const mpx = (p2x + p1x) * 0.5;
|
|
@@ -192,7 +210,6 @@ export class PathExtension extends AbstractExtension {
|
|
|
192
210
|
}
|
|
193
211
|
});
|
|
194
212
|
}
|
|
195
|
-
let circle = this._drawCircle(this._parentRect.x - this.designerCanvas.containerBoundingRect.x + x, this._parentRect.y - this.designerCanvas.containerBoundingRect.y + y, 5, 'svg-path');
|
|
196
213
|
circle.addEventListener(EventNames.PointerDown, event => this.pointerEvent(event, circle, p, index));
|
|
197
214
|
circle.addEventListener(EventNames.PointerMove, event => this.pointerEvent(event, circle, p, index));
|
|
198
215
|
circle.addEventListener(EventNames.PointerUp, event => this.pointerEvent(event, circle, p, index));
|
|
@@ -204,6 +221,24 @@ export class PathExtension extends AbstractExtension {
|
|
|
204
221
|
_drawPathLine(x1, y1, x2, y2) {
|
|
205
222
|
this._drawLine(this._parentRect.x - this.designerCanvas.containerBoundingRect.x + x1, this._parentRect.y - this.designerCanvas.containerBoundingRect.y + y1, this._parentRect.x - this.designerCanvas.containerBoundingRect.x + x2, this._parentRect.y - this.designerCanvas.containerBoundingRect.y + y2, 'svg-path-line');
|
|
206
223
|
}
|
|
224
|
+
_checkCircleIndex(p, circlePos) {
|
|
225
|
+
switch (p.type) {
|
|
226
|
+
case 'M':
|
|
227
|
+
case 'L':
|
|
228
|
+
if (p.values[0] == circlePos.x && p.values[1] == circlePos.y)
|
|
229
|
+
return true;
|
|
230
|
+
break;
|
|
231
|
+
case 'Q':
|
|
232
|
+
if (p.values[2] == circlePos.x && p.values[3] == circlePos.y)
|
|
233
|
+
return true;
|
|
234
|
+
break;
|
|
235
|
+
case 'C':
|
|
236
|
+
if (p.values[4] == circlePos.x && p.values[5] == circlePos.y)
|
|
237
|
+
return true;
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
207
242
|
refresh() {
|
|
208
243
|
this._removeAllOverlays();
|
|
209
244
|
this.extend();
|
|
@@ -19,6 +19,7 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
19
19
|
this.resizeAllSelected = resizeAllSelected;
|
|
20
20
|
}
|
|
21
21
|
extend() {
|
|
22
|
+
this.refresh();
|
|
22
23
|
}
|
|
23
24
|
refresh() {
|
|
24
25
|
const rect = this.extendedItem.element.getBoundingClientRect();
|
|
@@ -69,9 +70,13 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
69
70
|
this._initialPoint = currentPoint;
|
|
70
71
|
this._initialSizes = [];
|
|
71
72
|
this._actionModeStarted = actionMode;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
let rect = this.extendedItem.element.getBoundingClientRect();
|
|
74
|
+
this._initialSizes.push({ width: rect.width / this.designerCanvas.scaleFactor, height: rect.height / this.designerCanvas.scaleFactor });
|
|
75
|
+
if (this.resizeAllSelected) {
|
|
76
|
+
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
77
|
+
rect = designItem.element.getBoundingClientRect();
|
|
78
|
+
this._initialSizes.push({ width: rect.width / this.designerCanvas.scaleFactor, height: rect.height / this.designerCanvas.scaleFactor });
|
|
79
|
+
}
|
|
75
80
|
}
|
|
76
81
|
if (this.designerCanvas.alignOnSnap)
|
|
77
82
|
this.designerCanvas.snapLines.calculateSnaplines(this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
@@ -90,6 +95,7 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
90
95
|
this.extendedItem.element.style.height = this._initialSizes[i].height + trackY + 'px';
|
|
91
96
|
if (this.resizeAllSelected) {
|
|
92
97
|
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
98
|
+
i++;
|
|
93
99
|
if (designItem !== this.extendedItem) {
|
|
94
100
|
designItem.element.style.width = this._initialSizes[i].width + trackX + 'px';
|
|
95
101
|
designItem.element.style.height = this._initialSizes[i].height + trackY + 'px';
|
|
@@ -100,6 +106,7 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
100
106
|
case 's-resize':
|
|
101
107
|
this.extendedItem.element.style.height = this._initialSizes[i].height + trackY + 'px';
|
|
102
108
|
if (this.resizeAllSelected) {
|
|
109
|
+
i++;
|
|
103
110
|
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
104
111
|
if (designItem !== this.extendedItem) {
|
|
105
112
|
designItem.element.style.height = this._initialSizes[i].height + trackY + 'px';
|
|
@@ -110,6 +117,7 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
110
117
|
case 'e-resize':
|
|
111
118
|
this.extendedItem.element.style.width = this._initialSizes[i].width + trackX + 'px';
|
|
112
119
|
if (this.resizeAllSelected) {
|
|
120
|
+
i++;
|
|
113
121
|
for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
|
|
114
122
|
if (designItem !== this.extendedItem) {
|
|
115
123
|
designItem.element.style.width = this._initialSizes[i].width + trackX + 'px';
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { ResizeExtension } from "./ResizeExtension";
|
|
2
2
|
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
import { NodeType } from "../../../item/NodeType.js";
|
|
3
4
|
export class ResizeExtensionProvider {
|
|
4
5
|
resizeAllSelected;
|
|
5
6
|
constructor(resizeAllSelected = false) {
|
|
6
7
|
this.resizeAllSelected = resizeAllSelected;
|
|
7
8
|
}
|
|
8
9
|
shouldExtend(extensionManager, designerView, designItem) {
|
|
9
|
-
return
|
|
10
|
+
return designItem.nodeType == NodeType.Element;
|
|
10
11
|
}
|
|
11
12
|
getExtension(extensionManager, designerView, designItem) {
|
|
12
13
|
return new ResizeExtension(extensionManager, designerView, designItem, this.resizeAllSelected);
|
|
@@ -12,6 +12,7 @@ export declare class DrawElementTool implements ITool {
|
|
|
12
12
|
activated(serviceContainer: ServiceContainer): void;
|
|
13
13
|
dispose(): void;
|
|
14
14
|
pointerEventHandler(designerView: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
15
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
15
16
|
private _onPointerDown;
|
|
16
17
|
private _onPointerMove;
|
|
17
18
|
private _onPointerUp;
|
|
@@ -12,4 +12,5 @@ export declare class DrawEllipsisTool implements ITool {
|
|
|
12
12
|
activated(serviceContainer: ServiceContainer): void;
|
|
13
13
|
dispose(): void;
|
|
14
14
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
15
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
15
16
|
}
|
|
@@ -10,4 +10,5 @@ export declare class DrawLineTool implements ITool {
|
|
|
10
10
|
activated(serviceContainer: ServiceContainer): void;
|
|
11
11
|
dispose(): void;
|
|
12
12
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
13
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
13
14
|
}
|
|
@@ -16,4 +16,5 @@ export declare class DrawPathTool implements ITool {
|
|
|
16
16
|
activated(serviceContainer: ServiceContainer): void;
|
|
17
17
|
dispose(): void;
|
|
18
18
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
19
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
19
20
|
}
|
|
@@ -15,4 +15,5 @@ export declare class DrawRectTool implements ITool {
|
|
|
15
15
|
activated(serviceContainer: ServiceContainer): void;
|
|
16
16
|
dispose(): void;
|
|
17
17
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
18
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
18
19
|
}
|
|
@@ -5,4 +5,5 @@ export interface ITool extends IDisposable {
|
|
|
5
5
|
readonly cursor: string;
|
|
6
6
|
activated(serviceContainer: ServiceContainer): any;
|
|
7
7
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): any;
|
|
8
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): any;
|
|
8
9
|
}
|
|
@@ -6,6 +6,7 @@ export declare class MagicWandSelectorTool implements ITool {
|
|
|
6
6
|
private _pathD;
|
|
7
7
|
private _path;
|
|
8
8
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
9
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
9
10
|
activated(serviceContainer: ServiceContainer): void;
|
|
10
11
|
dispose(): void;
|
|
11
12
|
}
|
|
@@ -4,6 +4,7 @@ import { ITool } from './ITool';
|
|
|
4
4
|
export declare class PanTool implements ITool {
|
|
5
5
|
readonly cursor: string;
|
|
6
6
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
7
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
7
8
|
activated(serviceContainer: ServiceContainer): void;
|
|
8
9
|
dispose(): void;
|
|
9
10
|
}
|
|
@@ -5,5 +5,6 @@ export declare class PickColorTool implements ITool {
|
|
|
5
5
|
readonly cursor = "crosshair";
|
|
6
6
|
activated(serviceContainer: ServiceContainer): Promise<void>;
|
|
7
7
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): Promise<void>;
|
|
8
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
8
9
|
dispose(): void;
|
|
9
10
|
}
|
|
@@ -20,4 +20,5 @@ export declare class PointerTool implements ITool {
|
|
|
20
20
|
private _pointerActionTypeDrawSelection;
|
|
21
21
|
private _resetPointerEventsForClickThrough;
|
|
22
22
|
private _pointerActionTypeDragOrSelect;
|
|
23
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
23
24
|
}
|
|
@@ -7,5 +7,6 @@ export declare class RectangleSelectorTool implements ITool {
|
|
|
7
7
|
private _initialPoint;
|
|
8
8
|
activated(serviceContainer: ServiceContainer): void;
|
|
9
9
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
10
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
10
11
|
dispose(): void;
|
|
11
12
|
}
|
|
@@ -8,4 +8,5 @@ export declare class TextTool implements ITool {
|
|
|
8
8
|
readonly cursor = "text";
|
|
9
9
|
private _text;
|
|
10
10
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
11
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
11
12
|
}
|
|
@@ -5,5 +5,6 @@ export declare class ZoomTool implements ITool {
|
|
|
5
5
|
readonly cursor: string;
|
|
6
6
|
activated(serviceContainer: ServiceContainer): void;
|
|
7
7
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
8
|
+
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
8
9
|
dispose(): void;
|
|
9
10
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"description": "A UI designer for Polymer apps",
|
|
3
3
|
"name": "@node-projects/web-component-designer",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.83",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"author": "",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@node-projects/base-custom-webcomponent": "^0.5.0",
|
|
17
|
-
"construct-style-sheets-polyfill": "^3.0
|
|
17
|
+
"construct-style-sheets-polyfill": "^3.1.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@node-projects/lean-he-esm": "^3.3.0",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@types/codemirror": "^5.60.5",
|
|
23
23
|
"@types/jquery": "^3.5.13",
|
|
24
24
|
"@types/jquery.fancytree": "0.0.7",
|
|
25
|
-
"ace-builds": "^1.4.
|
|
25
|
+
"ace-builds": "^1.4.14",
|
|
26
26
|
"codemirror": "^5.65.1",
|
|
27
27
|
"custom-elements-manifest": "^1.0.0",
|
|
28
28
|
"esprima-next": "^5.8.1",
|