@node-projects/web-component-designer 0.0.238 → 0.0.239
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/assets/images/layout/TransformTool.svg +21 -0
- package/dist/elements/helper/ElementHelper.d.ts +4 -0
- package/dist/elements/helper/ElementHelper.js +29 -0
- package/dist/elements/services/DefaultServiceBootstrap.js +7 -2
- package/dist/elements/services/ServiceContainer.d.ts +6 -3
- package/dist/elements/services/ServiceContainer.js +5 -2
- package/dist/elements/services/dragDropService/DragDropService.d.ts +8 -2
- package/dist/elements/services/dragDropService/DragDropService.js +79 -21
- package/dist/elements/services/dragDropService/ExternalDragDropService copy.d.ts +6 -0
- package/dist/elements/services/dragDropService/ExternalDragDropService copy.js +28 -0
- package/dist/elements/services/dragDropService/ExternalDragDropService.d.ts +6 -0
- package/dist/elements/services/dragDropService/ExternalDragDropService.js +28 -0
- package/dist/elements/services/dragDropService/IDragDropService.d.ts +6 -1
- package/dist/elements/services/dragDropService/IExternalDragDropService copy.d.ts +5 -0
- package/dist/elements/services/dragDropService/IExternalDragDropService copy.js +1 -0
- package/dist/elements/services/dragDropService/IExternalDragDropService.d.ts +5 -0
- package/dist/elements/services/dragDropService/IExternalDragDropService.js +1 -0
- package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/DefaultPlacementService.js +11 -0
- package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +2 -0
- package/dist/elements/services/placementService/GridPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/GridPlacementService.js +2 -0
- package/dist/elements/services/placementService/IPlacementService.d.ts +5 -4
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +0 -2
- package/dist/elements/widgets/designerView/designerCanvas.js +36 -95
- package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtension.d.ts +15 -0
- package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtension.js +34 -0
- package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.js +13 -0
- package/dist/elements/widgets/designerView/extensions/svg/EllipsisExtension.js +2 -2
- package/dist/elements/widgets/designerView/extensions/svg/LineExtension.js +2 -2
- package/dist/elements/widgets/designerView/extensions/svg/PathExtension.js +2 -2
- package/dist/elements/widgets/designerView/extensions/svg/RectExtension.js +2 -2
- package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +2 -2
- package/dist/elements/widgets/designerView/tools/DrawLineTool.js +2 -2
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +2 -2
- package/dist/elements/widgets/designerView/tools/DrawRectTool.js +2 -2
- package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbar.d.ts +1 -1
- package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbar.js +6 -6
- package/dist/elements/widgets/designerView/tools/toolBar/buttons/TransformToolButtonProvider.d.ts +5 -0
- package/dist/elements/widgets/designerView/tools/toolBar/buttons/TransformToolButtonProvider.js +10 -0
- package/dist/elements/widgets/designerView/tools/toolBar/popups/TransformToolPopup.d.ts +31 -0
- package/dist/elements/widgets/designerView/tools/toolBar/popups/TransformToolPopup.js +293 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
3
|
+
<svg width="100%" height="100%" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.5;">
|
|
4
|
+
<g transform="matrix(1.42857,0,0,0.416667,-14.2857,33.3333)">
|
|
5
|
+
<path d="M10,50.5L10,29.5L71.25,29.5L71.25,10L80,40L71.25,70L71.25,50.5L10,50.5Z"/>
|
|
6
|
+
</g>
|
|
7
|
+
<g transform="matrix(8.74748e-17,-1.42857,0.416667,2.55135e-17,33.3333,114.286)">
|
|
8
|
+
<path d="M10,50.5L10,29.5L71.25,29.5L71.25,10L80,40L71.25,70L71.25,50.5L10,50.5Z"/>
|
|
9
|
+
</g>
|
|
10
|
+
<g transform="matrix(1,0,0,1,4,-2)">
|
|
11
|
+
<g transform="matrix(1.17647,0,0,1,59.9412,-58)">
|
|
12
|
+
<path d="M6,79L23,79" style="fill:none;stroke:black;stroke-width:5.72px;"/>
|
|
13
|
+
</g>
|
|
14
|
+
<g transform="matrix(7.2038e-17,-1.17647,1,6.12323e-17,-2,38.0588)">
|
|
15
|
+
<path d="M6,79L23,79" style="fill:none;stroke:black;stroke-width:5.72px;"/>
|
|
16
|
+
</g>
|
|
17
|
+
</g>
|
|
18
|
+
<g transform="matrix(0.882353,0,0,0.75,6.20588,21.75)">
|
|
19
|
+
<path d="M6,79L23,79" style="fill:none;stroke:black;stroke-width:7.63px;"/>
|
|
20
|
+
</g>
|
|
21
|
+
</svg>
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { IPoint } from '../../interfaces/IPoint.js';
|
|
2
|
+
import { IRect } from '../../interfaces/IRect.js';
|
|
3
|
+
import { IDesignItem } from '../item/IDesignItem.js';
|
|
4
|
+
import { IDesignerCanvas } from '../widgets/designerView/IDesignerCanvas.js';
|
|
2
5
|
export declare function inDesigner(element: Element): boolean;
|
|
3
6
|
export declare function newElementFromString(text: any): Element;
|
|
4
7
|
export declare enum ElementDisplayType {
|
|
@@ -17,3 +20,4 @@ export declare function getElementsWindowOffsetWithoutSelfAndParentTransformatio
|
|
|
17
20
|
offsetTop: number;
|
|
18
21
|
};
|
|
19
22
|
export declare function getContentBoxContentOffsets(element: any): IPoint;
|
|
23
|
+
export declare function calculateOuterRect(designItems: IDesignItem[], designerCanvas: IDesignerCanvas): IRect;
|
|
@@ -105,3 +105,32 @@ export function getContentBoxContentOffsets(element) {
|
|
|
105
105
|
+ parseInt(getComputedStyle(element).borderBottom.replace('px', ''));
|
|
106
106
|
return { x: xOffset, y: yOffset };
|
|
107
107
|
}
|
|
108
|
+
export function calculateOuterRect(designItems, designerCanvas) {
|
|
109
|
+
let min = { x: Number.MAX_VALUE, y: Number.MAX_VALUE };
|
|
110
|
+
let max = { x: Number.MIN_VALUE, y: Number.MIN_VALUE };
|
|
111
|
+
let elementRect;
|
|
112
|
+
for (let s of designItems) {
|
|
113
|
+
elementRect = {
|
|
114
|
+
x: designerCanvas.getNormalizedElementCoordinates(s.element).x,
|
|
115
|
+
y: designerCanvas.getNormalizedElementCoordinates(s.element).y,
|
|
116
|
+
width: designerCanvas.getNormalizedElementCoordinates(s.element).width,
|
|
117
|
+
height: designerCanvas.getNormalizedElementCoordinates(s.element).height
|
|
118
|
+
};
|
|
119
|
+
// calculate min and max of selection
|
|
120
|
+
if (elementRect.x < min.x)
|
|
121
|
+
min.x = elementRect.x;
|
|
122
|
+
if (elementRect.y < min.y)
|
|
123
|
+
min.y = elementRect.y;
|
|
124
|
+
if (elementRect.x + elementRect.width > max.x)
|
|
125
|
+
max.x = elementRect.x + elementRect.width;
|
|
126
|
+
if (elementRect.y + elementRect.height > max.y)
|
|
127
|
+
max.y = elementRect.y + elementRect.height;
|
|
128
|
+
}
|
|
129
|
+
// calculate reckt around selection
|
|
130
|
+
return {
|
|
131
|
+
x: min.x,
|
|
132
|
+
y: min.y,
|
|
133
|
+
width: max.x - min.x,
|
|
134
|
+
height: max.y - min.y
|
|
135
|
+
};
|
|
136
|
+
}
|
|
@@ -39,7 +39,7 @@ import { GridPlacementService } from './placementService/GridPlacementService.js
|
|
|
39
39
|
import { ElementAtPointService } from './elementAtPointService/ElementAtPointService.js';
|
|
40
40
|
import { FlexBoxPlacementService } from './placementService/FlexBoxPlacementService.js';
|
|
41
41
|
import { SnaplinesProviderService } from './placementService/SnaplinesProviderService.js';
|
|
42
|
-
import {
|
|
42
|
+
import { ExternalDragDropService } from './dragDropService/ExternalDragDropService.js';
|
|
43
43
|
import { EditTextExtensionProvider } from '../widgets/designerView/extensions/EditText/EditTextExtensionProvider.js';
|
|
44
44
|
import { CopyPasteService } from './copyPasteService/CopyPasteService.js';
|
|
45
45
|
import { DefaultModelCommandService } from './modelCommandService/DefaultModelCommandService.js';
|
|
@@ -80,6 +80,9 @@ import { EditGridColumnRowSizesExtensionProvider } from '../widgets/designerView
|
|
|
80
80
|
import { DisplayGridExtensionProvider } from '../widgets/designerView/extensions/grid/DisplayGridExtensionProvider.js';
|
|
81
81
|
import { ApplyFirstMachingExtensionProvider } from '../widgets/designerView/extensions/logic/ApplyFirstMachingExtensionProvider.js';
|
|
82
82
|
import { DesignItemDocumentPositionService } from './designItemDocumentPositionService/DesignItemDocumentPositionService.js';
|
|
83
|
+
import { TransformToolButtonProvider } from '../widgets/designerView/tools/toolBar/buttons/TransformToolButtonProvider.js';
|
|
84
|
+
import { MultipleSelectionRectExtensionProvider } from '../widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.js';
|
|
85
|
+
import { DragDropService } from './dragDropService/DragDropService.js';
|
|
83
86
|
export function createDefaultServiceContainer() {
|
|
84
87
|
let serviceContainer = new ServiceContainer();
|
|
85
88
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -98,6 +101,7 @@ export function createDefaultServiceContainer() {
|
|
|
98
101
|
serviceContainer.register("snaplinesProviderService", new SnaplinesProviderService());
|
|
99
102
|
serviceContainer.register("htmlParserService", new DefaultHtmlParserService());
|
|
100
103
|
serviceContainer.register("elementAtPointService", new ElementAtPointService());
|
|
104
|
+
serviceContainer.register("externalDragDropService", new ExternalDragDropService());
|
|
101
105
|
serviceContainer.register("dragDropService", new DragDropService());
|
|
102
106
|
serviceContainer.register("copyPasteService", new CopyPasteService());
|
|
103
107
|
serviceContainer.register("modelCommandService", new DefaultModelCommandService());
|
|
@@ -126,6 +130,7 @@ export function createDefaultServiceContainer() {
|
|
|
126
130
|
new RectExtentionProvider(),
|
|
127
131
|
new ResizeExtensionProvider(true),
|
|
128
132
|
new RotateExtensionProvider(),
|
|
133
|
+
new MultipleSelectionRectExtensionProvider(),
|
|
129
134
|
]);
|
|
130
135
|
serviceContainer.designerExtensions.set(ExtensionType.Selection, [
|
|
131
136
|
new SelectionDefaultExtensionProvider()
|
|
@@ -170,7 +175,7 @@ export function createDefaultServiceContainer() {
|
|
|
170
175
|
//new CursorLinePointerExtensionProvider()
|
|
171
176
|
);
|
|
172
177
|
serviceContainer.designViewConfigButtons.push(new ButtonSeperatorProvider(20), new GridExtensionDesignViewConfigButtons(), new FlexboxExtensionDesignViewConfigButtons(), new ButtonSeperatorProvider(10), new InvisibleElementExtensionDesignViewConfigButtons(), new ButtonSeperatorProvider(10), new StylesheetServiceDesignViewConfigButtons());
|
|
173
|
-
serviceContainer.designViewToolbarButtons.push(new PointerToolButtonProvider(), new SeperatorToolProvider(22), new SelectorToolButtonProvider(), new SeperatorToolProvider(22), new ZoomToolButtonProvider(), new SeperatorToolProvider(22), new DrawToolButtonProvider(), new SeperatorToolProvider(
|
|
178
|
+
serviceContainer.designViewToolbarButtons.push(new PointerToolButtonProvider(), new SeperatorToolProvider(22), new SelectorToolButtonProvider(), new SeperatorToolProvider(22), new ZoomToolButtonProvider(), new SeperatorToolProvider(22), new DrawToolButtonProvider(), new SeperatorToolProvider(22), new TextToolButtonProvider(), new SeperatorToolProvider(22), new TransformToolButtonProvider());
|
|
174
179
|
serviceContainer.designerContextMenuExtensions = [
|
|
175
180
|
new CopyPasteContextMenu(),
|
|
176
181
|
new SeperatorContextMenu(),
|
|
@@ -18,7 +18,7 @@ import { GlobalContext } from './GlobalContext.js';
|
|
|
18
18
|
import { IBindingService } from './bindingsService/IBindingService.js';
|
|
19
19
|
import { IElementAtPointService } from './elementAtPointService/IElementAtPointService.js';
|
|
20
20
|
import { ISnaplinesProviderService } from "./placementService/ISnaplinesProviderService.js";
|
|
21
|
-
import {
|
|
21
|
+
import { IExternalDragDropService } from './dragDropService/IExternalDragDropService.js';
|
|
22
22
|
import { ICopyPasteService } from "./copyPasteService/ICopyPasteService.js";
|
|
23
23
|
import { IDesignerPointerExtensionProvider } from "../widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtensionProvider.js";
|
|
24
24
|
import { IModelCommandService } from "./modelCommandService/IModelCommandService.js";
|
|
@@ -39,6 +39,7 @@ import { IContentService } from './contentService/IContentService.js';
|
|
|
39
39
|
import { IStylesheetService } from './stylesheetService/IStylesheetService.js';
|
|
40
40
|
import { IDesignerCanvas } from '../widgets/designerView/IDesignerCanvas.js';
|
|
41
41
|
import { IDesignItemDocumentPositionService } from './designItemDocumentPositionService/IDesignItemDocumentPositionService.js';
|
|
42
|
+
import { IDragDropService } from './dragDropService/IDragDropService.js';
|
|
42
43
|
interface ServiceNameMap {
|
|
43
44
|
"propertyService": IPropertiesService;
|
|
44
45
|
"containerService": IPlacementService;
|
|
@@ -53,12 +54,13 @@ interface ServiceNameMap {
|
|
|
53
54
|
"bindableObjectsService": IBindableObjectsService;
|
|
54
55
|
"bindableObjectDragDropService": IBindableObjectDragDropService;
|
|
55
56
|
"elementAtPointService": IElementAtPointService;
|
|
56
|
-
"
|
|
57
|
+
"externalDragDropService": IExternalDragDropService;
|
|
57
58
|
"copyPasteService": ICopyPasteService;
|
|
58
59
|
"modelCommandService": IModelCommandService;
|
|
59
60
|
"demoProviderService": IDemoProviderService;
|
|
60
61
|
"elementInteractionService": IElementInteractionService;
|
|
61
62
|
"propertyGroupsService": IPropertyTabsService;
|
|
63
|
+
"dragDropService": IDragDropService;
|
|
62
64
|
"undoService": (designerCanvas: IDesignerCanvas) => IUndoService;
|
|
63
65
|
"selectionService": (designerCanvas: IDesignerCanvas) => ISelectionService;
|
|
64
66
|
"contentService": (designerCanvas: IDesignerCanvas) => IContentService;
|
|
@@ -85,6 +87,7 @@ export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMa
|
|
|
85
87
|
get bindingService(): IBindingService;
|
|
86
88
|
get bindableObjectsServices(): IBindableObjectsService[];
|
|
87
89
|
get bindableObjectDragDropService(): IBindableObjectDragDropService;
|
|
90
|
+
get dragDropService(): IDragDropService;
|
|
88
91
|
get elementInteractionServices(): IElementInteractionService[];
|
|
89
92
|
get propertiesServices(): IPropertiesService[];
|
|
90
93
|
get propertyGroupService(): IPropertyTabsService;
|
|
@@ -97,7 +100,7 @@ export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMa
|
|
|
97
100
|
get htmlParserService(): IHtmlParserService;
|
|
98
101
|
get intializationService(): IIntializationService;
|
|
99
102
|
get elementAtPointService(): IElementAtPointService;
|
|
100
|
-
get
|
|
103
|
+
get externalDragDropService(): IExternalDragDropService;
|
|
101
104
|
get copyPasteService(): ICopyPasteService;
|
|
102
105
|
get modelCommandService(): IModelCommandService;
|
|
103
106
|
get demoProviderService(): IDemoProviderService;
|
|
@@ -34,6 +34,9 @@ export class ServiceContainer extends BaseServiceContainer {
|
|
|
34
34
|
get bindableObjectDragDropService() {
|
|
35
35
|
return this.getLastService('bindableObjectDragDropService');
|
|
36
36
|
}
|
|
37
|
+
get dragDropService() {
|
|
38
|
+
return this.getLastService('dragDropService');
|
|
39
|
+
}
|
|
37
40
|
get elementInteractionServices() {
|
|
38
41
|
return this.getServices('elementInteractionService');
|
|
39
42
|
}
|
|
@@ -70,8 +73,8 @@ export class ServiceContainer extends BaseServiceContainer {
|
|
|
70
73
|
get elementAtPointService() {
|
|
71
74
|
return this.getLastService('elementAtPointService');
|
|
72
75
|
}
|
|
73
|
-
get
|
|
74
|
-
return this.getLastService('
|
|
76
|
+
get externalDragDropService() {
|
|
77
|
+
return this.getLastService('externalDragDropService');
|
|
75
78
|
}
|
|
76
79
|
get copyPasteService() {
|
|
77
80
|
return this.getLastService('copyPasteService');
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { IDesignerCanvas } from "../../widgets/designerView/IDesignerCanvas.js";
|
|
2
2
|
import { IDragDropService } from "./IDragDropService.js";
|
|
3
|
+
import { IDesignItem } from "../../item/IDesignItem.js";
|
|
4
|
+
import { IPlacementService } from "../placementService/IPlacementService.js";
|
|
3
5
|
export declare class DragDropService implements IDragDropService {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
private _dragOverExtensionItem;
|
|
7
|
+
dragEnter(designerCanvas: IDesignerCanvas, event: DragEvent): void;
|
|
8
|
+
dragLeave(designerCanvas: IDesignerCanvas, event: DragEvent): void;
|
|
9
|
+
dragOver(designerCanvas: IDesignerCanvas, event: DragEvent): void;
|
|
10
|
+
drop(designerCanvas: IDesignerCanvas, event: DragEvent): Promise<void>;
|
|
11
|
+
getPossibleContainerForDragDrop(designerCanvas: IDesignerCanvas, event: DragEvent): [newContainerElementDesignItem: IDesignItem, newContainerService: IPlacementService];
|
|
6
12
|
}
|
|
@@ -1,28 +1,86 @@
|
|
|
1
1
|
import { DesignItem } from '../../item/DesignItem.js';
|
|
2
2
|
import { InsertAction } from "../undoService/transactionItems/InsertAction.js";
|
|
3
|
+
import { ExtensionType } from "../../widgets/designerView/extensions/ExtensionType.js";
|
|
4
|
+
import { dragDropFormatNameElementDefinition } from "../../../Constants.js";
|
|
3
5
|
export class DragDropService {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return 'copy';
|
|
7
|
-
return 'none';
|
|
6
|
+
_dragOverExtensionItem;
|
|
7
|
+
dragEnter(designerCanvas, event) {
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const img = document.createElement('img');
|
|
14
|
-
img.src = reader.result;
|
|
15
|
-
const di = DesignItem.createDesignItemFromInstance(img, designerView.serviceContainer, designerView.instanceServiceContainer);
|
|
16
|
-
let grp = di.openGroup("Insert of <img>");
|
|
17
|
-
di.setStyle('position', 'absolute');
|
|
18
|
-
const targetRect = event.target.getBoundingClientRect();
|
|
19
|
-
di.setStyle('top', event.offsetY + targetRect.top - designerView.containerBoundingRect.y + 'px');
|
|
20
|
-
di.setStyle('left', event.offsetX + targetRect.left - designerView.containerBoundingRect.x + 'px');
|
|
21
|
-
designerView.instanceServiceContainer.undoService.execute(new InsertAction(designerView.rootDesignItem, designerView.rootDesignItem.childCount, di));
|
|
22
|
-
grp.commit();
|
|
23
|
-
requestAnimationFrame(() => designerView.instanceServiceContainer.selectionService.setSelectedElements([di]));
|
|
24
|
-
};
|
|
25
|
-
reader.readAsDataURL(event.dataTransfer.files[0]);
|
|
9
|
+
dragLeave(designerCanvas, event) {
|
|
10
|
+
if (this._dragOverExtensionItem) {
|
|
11
|
+
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
|
|
12
|
+
this._dragOverExtensionItem = null;
|
|
26
13
|
}
|
|
27
14
|
}
|
|
15
|
+
dragOver(designerCanvas, event) {
|
|
16
|
+
let [newContainer] = this.getPossibleContainerForDragDrop(designerCanvas, event);
|
|
17
|
+
if (this._dragOverExtensionItem != newContainer) {
|
|
18
|
+
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
|
|
19
|
+
designerCanvas.extensionManager.applyExtension(newContainer, ExtensionType.ContainerExternalDragOver, event);
|
|
20
|
+
this._dragOverExtensionItem = newContainer;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
designerCanvas.extensionManager.refreshExtension(newContainer, ExtensionType.ContainerExternalDragOver, event);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async drop(designerCanvas, event) {
|
|
27
|
+
if (this._dragOverExtensionItem) {
|
|
28
|
+
designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
|
|
29
|
+
this._dragOverExtensionItem = null;
|
|
30
|
+
}
|
|
31
|
+
let [newContainer] = this.getPossibleContainerForDragDrop(designerCanvas, event);
|
|
32
|
+
if (!newContainer)
|
|
33
|
+
newContainer = designerCanvas.rootDesignItem;
|
|
34
|
+
//TODO : we need to use container service for adding to element, so also grid and flexbox work correct
|
|
35
|
+
const transferData = event.dataTransfer.getData(dragDropFormatNameElementDefinition);
|
|
36
|
+
const elementDefinition = JSON.parse(transferData);
|
|
37
|
+
const di = await designerCanvas.serviceContainer.forSomeServicesTillResult("instanceService", (service) => service.getElement(elementDefinition, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer));
|
|
38
|
+
const grp = di.openGroup("Insert of <" + di.name + ">");
|
|
39
|
+
di.setStyle('position', 'absolute');
|
|
40
|
+
const containerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainer, getComputedStyle(newContainer.element)));
|
|
41
|
+
containerService.enterContainer(newContainer, [di]);
|
|
42
|
+
const containerPos = designerCanvas.getNormalizedElementCoordinates(newContainer.element);
|
|
43
|
+
const evCoord = designerCanvas.getNormalizedEventCoordinates(event);
|
|
44
|
+
const pos = { x: evCoord.x - containerPos.x, y: evCoord.y - containerPos.y };
|
|
45
|
+
containerService.place(event, designerCanvas, newContainer, { x: 0, y: 0 }, { x: 0, y: 0 }, pos, [di]);
|
|
46
|
+
containerService.finishPlace(event, designerCanvas, newContainer, { x: 0, y: 0 }, { x: 0, y: 0 }, pos, [di]);
|
|
47
|
+
designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(newContainer, newContainer.childCount, di));
|
|
48
|
+
requestAnimationFrame(() => {
|
|
49
|
+
designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([di]);
|
|
50
|
+
grp.commit();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
getPossibleContainerForDragDrop(designerCanvas, event) {
|
|
54
|
+
let newContainerElementDesignItem = null;
|
|
55
|
+
let newContainerService = null;
|
|
56
|
+
const elementsFromPoint = designerCanvas.elementsFromPoint(event.x, event.y);
|
|
57
|
+
for (let e of elementsFromPoint) {
|
|
58
|
+
if (e == designerCanvas.rootDesignItem.element) {
|
|
59
|
+
newContainerElementDesignItem = designerCanvas.rootDesignItem;
|
|
60
|
+
const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
|
|
61
|
+
newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
else if (false) {
|
|
65
|
+
//check we don't try to move a item over one of its children..
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(e, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
69
|
+
const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
|
|
70
|
+
newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
71
|
+
if (newContainerService) {
|
|
72
|
+
//TODO: Maybe the check for SVG Elemnt should be in "canEnterByDrop"?
|
|
73
|
+
if (newContainerService.canEnterByDrop(newContainerElementDesignItem) && !(newContainerElementDesignItem.element instanceof SVGElement)) {
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
newContainerElementDesignItem = null;
|
|
78
|
+
newContainerService = null;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return [newContainerElementDesignItem, newContainerService];
|
|
85
|
+
}
|
|
28
86
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IDesignerCanvas } from "../../widgets/designerView/IDesignerCanvas.js";
|
|
2
|
+
import { IExternalDragDropService } from "./IExternalDragDropService.js";
|
|
3
|
+
export declare class ExternalDragDropService implements IExternalDragDropService {
|
|
4
|
+
dragOver(event: DragEvent): 'none' | 'copy' | 'link' | 'move';
|
|
5
|
+
drop(designerView: IDesignerCanvas, event: DragEvent): void;
|
|
6
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DesignItem } from '../../item/DesignItem.js';
|
|
2
|
+
import { InsertAction } from "../undoService/transactionItems/InsertAction.js";
|
|
3
|
+
export class ExternalDragDropService {
|
|
4
|
+
dragOver(event) {
|
|
5
|
+
if (event.dataTransfer.items[0].type.startsWith('image/'))
|
|
6
|
+
return 'copy';
|
|
7
|
+
return 'none';
|
|
8
|
+
}
|
|
9
|
+
drop(designerView, event) {
|
|
10
|
+
if (event.dataTransfer.files[0].type.startsWith('image/')) {
|
|
11
|
+
let reader = new FileReader();
|
|
12
|
+
reader.onloadend = () => {
|
|
13
|
+
const img = document.createElement('img');
|
|
14
|
+
img.src = reader.result;
|
|
15
|
+
const di = DesignItem.createDesignItemFromInstance(img, designerView.serviceContainer, designerView.instanceServiceContainer);
|
|
16
|
+
let grp = di.openGroup("Insert of <img>");
|
|
17
|
+
di.setStyle('position', 'absolute');
|
|
18
|
+
const targetRect = event.target.getBoundingClientRect();
|
|
19
|
+
di.setStyle('top', event.offsetY + targetRect.top - designerView.containerBoundingRect.y + 'px');
|
|
20
|
+
di.setStyle('left', event.offsetX + targetRect.left - designerView.containerBoundingRect.x + 'px');
|
|
21
|
+
designerView.instanceServiceContainer.undoService.execute(new InsertAction(designerView.rootDesignItem, designerView.rootDesignItem.childCount, di));
|
|
22
|
+
grp.commit();
|
|
23
|
+
requestAnimationFrame(() => designerView.instanceServiceContainer.selectionService.setSelectedElements([di]));
|
|
24
|
+
};
|
|
25
|
+
reader.readAsDataURL(event.dataTransfer.files[0]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IDesignerCanvas } from "../../widgets/designerView/IDesignerCanvas.js";
|
|
2
|
+
import { IExternalDragDropService } from "./IExternalDragDropService.js";
|
|
3
|
+
export declare class ExternalDragDropService implements IExternalDragDropService {
|
|
4
|
+
dragOver(event: DragEvent): 'none' | 'copy' | 'link' | 'move';
|
|
5
|
+
drop(designerCanvas: IDesignerCanvas, event: DragEvent): void;
|
|
6
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DesignItem } from '../../item/DesignItem.js';
|
|
2
|
+
import { InsertAction } from "../undoService/transactionItems/InsertAction.js";
|
|
3
|
+
export class ExternalDragDropService {
|
|
4
|
+
dragOver(event) {
|
|
5
|
+
if (event.dataTransfer.items[0].type.startsWith('image/'))
|
|
6
|
+
return 'copy';
|
|
7
|
+
return 'none';
|
|
8
|
+
}
|
|
9
|
+
drop(designerCanvas, event) {
|
|
10
|
+
if (event.dataTransfer.files[0].type.startsWith('image/')) {
|
|
11
|
+
let reader = new FileReader();
|
|
12
|
+
reader.onloadend = () => {
|
|
13
|
+
const img = document.createElement('img');
|
|
14
|
+
img.src = reader.result;
|
|
15
|
+
const di = DesignItem.createDesignItemFromInstance(img, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
16
|
+
let grp = di.openGroup("Insert of <img>");
|
|
17
|
+
di.setStyle('position', 'absolute');
|
|
18
|
+
const targetRect = event.target.getBoundingClientRect();
|
|
19
|
+
di.setStyle('top', event.offsetY + targetRect.top - designerCanvas.containerBoundingRect.y + 'px');
|
|
20
|
+
di.setStyle('left', event.offsetX + targetRect.left - designerCanvas.containerBoundingRect.x + 'px');
|
|
21
|
+
designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
|
|
22
|
+
grp.commit();
|
|
23
|
+
requestAnimationFrame(() => designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([di]));
|
|
24
|
+
};
|
|
25
|
+
reader.readAsDataURL(event.dataTransfer.files[0]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import { IDesignItem } from "../../item/IDesignItem.js";
|
|
1
2
|
import { IDesignerCanvas } from "../../widgets/designerView/IDesignerCanvas.js";
|
|
3
|
+
import { IPlacementService } from "../placementService/IPlacementService.js";
|
|
2
4
|
export interface IDragDropService {
|
|
3
|
-
|
|
5
|
+
dragEnter(designerCanvas: IDesignerCanvas, event: DragEvent): any;
|
|
6
|
+
dragLeave(designerCanvas: IDesignerCanvas, event: DragEvent): any;
|
|
7
|
+
dragOver(designerCanvas: IDesignerCanvas, event: DragEvent): any;
|
|
4
8
|
drop(designerCanvas: IDesignerCanvas, event: DragEvent): any;
|
|
9
|
+
getPossibleContainerForDragDrop(designerCanvas: IDesignerCanvas, event: DragEvent): [newContainerElementDesignItem: IDesignItem, newContainerService: IPlacementService];
|
|
5
10
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -12,6 +12,7 @@ export declare class DefaultPlacementService implements IPlacementService {
|
|
|
12
12
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
13
13
|
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
14
14
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
15
|
+
moveElements(designItems: IDesignItem[], position: IPoint, absolute: boolean): void;
|
|
15
16
|
enterContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
16
17
|
leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
17
18
|
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
@@ -109,6 +109,17 @@ export class DefaultPlacementService {
|
|
|
109
109
|
combineTransforms(designItem.element, designItem.getStyle('transform'), translationMatrix.toString());
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
+
moveElements(designItems, position, absolute) {
|
|
113
|
+
//TODO: Check if we set left or right
|
|
114
|
+
//TODO: Use CSS units
|
|
115
|
+
for (let d of designItems) {
|
|
116
|
+
if (position.x)
|
|
117
|
+
d.setStyle('left', parseInt(d.element.style.left) - position.x + 'px');
|
|
118
|
+
if (position.y)
|
|
119
|
+
d.setStyle('top', parseInt(d.element.style.top) - position.y + 'px');
|
|
120
|
+
}
|
|
121
|
+
designItems[0].instanceServiceContainer.designerCanvas.extensionManager.refreshExtensions(designItems);
|
|
122
|
+
}
|
|
112
123
|
enterContainer(container, items) {
|
|
113
124
|
let filterdItems = filterChildPlaceItems(items);
|
|
114
125
|
for (let i of filterdItems) {
|
|
@@ -14,4 +14,5 @@ export declare class FlexBoxPlacementService implements IPlacementService {
|
|
|
14
14
|
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
15
15
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
16
16
|
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
17
|
+
moveElements(designItems: IDesignItem[], position: IPoint, absolute: boolean): void;
|
|
17
18
|
}
|
|
@@ -14,4 +14,5 @@ export declare class GridPlacementService implements IPlacementService {
|
|
|
14
14
|
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
15
15
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
16
16
|
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
|
|
17
|
+
moveElements(designItems: IDesignItem[], position: IPoint, absolute: boolean): void;
|
|
17
18
|
}
|
|
@@ -3,10 +3,10 @@ import { IDesignItem } from '../../item/IDesignItem.js';
|
|
|
3
3
|
import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
|
|
4
4
|
import { IPoint } from '../../../interfaces/IPoint.js';
|
|
5
5
|
export interface IPlacementService extends IService {
|
|
6
|
-
serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration):
|
|
7
|
-
canEnterByDrop(container: IDesignItem):
|
|
8
|
-
canEnter(container: IDesignItem, items: IDesignItem[]):
|
|
9
|
-
canLeave(container: IDesignItem, items: IDesignItem[]):
|
|
6
|
+
serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
|
|
7
|
+
canEnterByDrop(container: IDesignItem): boolean;
|
|
8
|
+
canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
9
|
+
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
10
10
|
enterContainer(container: IDesignItem, items: IDesignItem[]): any;
|
|
11
11
|
leaveContainer(container: IDesignItem, items: IDesignItem[]): any;
|
|
12
12
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
@@ -14,4 +14,5 @@ export interface IPlacementService extends IService {
|
|
|
14
14
|
startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
|
|
15
15
|
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
|
|
16
16
|
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
|
|
17
|
+
moveElements(designItems: IDesignItem[], position: IPoint, absolute: boolean): any;
|
|
17
18
|
}
|
|
@@ -90,12 +90,10 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
90
90
|
lazyTriggerReparseDocumentStylesheets(): void;
|
|
91
91
|
private reparseDocumentStylesheets;
|
|
92
92
|
addDesignItems(designItems: IDesignItem[]): void;
|
|
93
|
-
_dragOverExtensionItem: IDesignItem;
|
|
94
93
|
private _onDragEnter;
|
|
95
94
|
private _onDragLeave;
|
|
96
95
|
private _lastDdElement;
|
|
97
96
|
private _onDragOver;
|
|
98
|
-
private _getPossibleContainerForDrop;
|
|
99
97
|
private _onDrop;
|
|
100
98
|
showDesignItemContextMenu(designItem: IDesignItem, event: MouseEvent): ContextMenu;
|
|
101
99
|
private _onDblClick;
|