@node-projects/web-component-designer 0.0.17 → 0.0.19
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/documentContainer.js +1 -0
- package/dist/elements/item/DesignItem.d.ts +1 -0
- package/dist/elements/item/DesignItem.js +36 -27
- package/dist/elements/item/IDesignItem.d.ts +1 -0
- package/dist/elements/services/DefaultServiceBootstrap.js +8 -0
- package/dist/elements/services/ServiceContainer.d.ts +6 -0
- package/dist/elements/services/ServiceContainer.js +6 -0
- package/dist/elements/services/dragDropService/DragDropService.d.ts +6 -0
- package/dist/elements/services/dragDropService/DragDropService.js +28 -0
- package/dist/elements/services/dragDropService/IDragDropService.d.ts +5 -0
- package/dist/elements/{loader/ICustomElementsManifest.js → services/dragDropService/IDragDropService.js} +0 -0
- package/dist/elements/services/instanceService/IPrepareElementsForDesignerService.d.ts +4 -0
- package/dist/elements/{loader/IOldCustomElementsManifest copy.js → services/instanceService/IPrepareElementsForDesignerService.js} +0 -0
- package/dist/elements/services/instanceService/PrepareElementsForDesignerService.d.ts +6 -0
- package/dist/elements/services/instanceService/PrepareElementsForDesignerService.js +23 -0
- package/dist/elements/services/placementService/GridPlacementService.js +2 -2
- package/dist/elements/services/undoService/transactionItems/InsertAction.js +3 -0
- package/dist/elements/widgets/designerView/IDesignerView.d.ts +1 -0
- package/dist/elements/widgets/designerView/designerView.d.ts +4 -2
- package/dist/elements/widgets/designerView/designerView.js +58 -29
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtension.d.ts +14 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtension.js +42 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.d.ts +9 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.js +9 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.d.ts +17 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +78 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtensionProvider.d.ts +9 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtensionProvider.js +11 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtension.d.ts +27 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtension.js +61 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.d.ts +9 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.js +9 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +5 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionType.js +4 -0
- package/dist/elements/widgets/designerView/extensions/RotateExtension.js +1 -1
- package/dist/elements/widgets/designerView/overlayLayerView.d.ts +2 -2
- package/dist/elements/widgets/designerView/overlayLayerView.js +3 -2
- package/dist/enums/EventNames.d.ts +5 -1
- package/dist/enums/EventNames.js +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +2 -0
- package/package.json +1 -1
- package/dist/elements/loader/CustomElementsManifestLoader.d.ts +0 -8
- package/dist/elements/loader/CustomElementsManifestLoader.js +0 -45
- package/dist/elements/loader/ICustomElementsManifest.d.ts +0 -24
- package/dist/elements/loader/IOldCustomElementsManifest copy.d.ts +0 -24
- package/dist/elements/loader/OldCustomElementsManifestLoader copy.d.ts +0 -8
- package/dist/elements/loader/OldCustomElementsManifestLoader copy.js +0 -45
- package/dist/elements/services/placementService/DefaultPlacementService copy.d.ts +0 -17
- package/dist/elements/services/placementService/DefaultPlacementService copy.js +0 -103
- package/dist/elements/services/placementService/IPlacementService copy.d.ts +0 -16
- package/dist/elements/services/placementService/IPlacementService copy.js +0 -1
- package/dist/elements/services/placementService/ISnaplinesService.d.ts +0 -16
- package/dist/elements/services/placementService/ISnaplinesService.js +0 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionLayer.d.ts +0 -5
- package/dist/elements/widgets/designerView/extensions/ExtensionLayer.js +0 -6
|
@@ -12,6 +12,7 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
|
|
|
12
12
|
this._tabControl = new DesignerTabControl();
|
|
13
13
|
div.appendChild(this._tabControl);
|
|
14
14
|
this.designerView = new DesignerView();
|
|
15
|
+
this.designerView.setAttribute('exportparts', 'canvas');
|
|
15
16
|
this.designerView.title = 'Designer';
|
|
16
17
|
this._tabControl.appendChild(this.designerView);
|
|
17
18
|
this.designerView.initialize(this._serviceContainer);
|
|
@@ -44,6 +44,7 @@ export declare class DesignItem implements IDesignItem {
|
|
|
44
44
|
get lockAtDesignTime(): boolean;
|
|
45
45
|
set lockAtDesignTime(value: boolean);
|
|
46
46
|
static createDesignItemFromInstance(node: Node, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): DesignItem;
|
|
47
|
+
updateChildrenFromNodesChildren(): void;
|
|
47
48
|
constructor(node: Node, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer);
|
|
48
49
|
openGroup(title: string, affectedItems?: IDesignItem[]): ChangeGroup;
|
|
49
50
|
getOrCreateDesignItem(node: Node): IDesignItem;
|
|
@@ -93,6 +93,7 @@ export class DesignItem {
|
|
|
93
93
|
this._childArray = [];
|
|
94
94
|
DomHelper.removeAllChildnodes(this.element);
|
|
95
95
|
}
|
|
96
|
+
//abstract text content to own property. so only chnage via designer api will use it.
|
|
96
97
|
get hasContent() {
|
|
97
98
|
return this.nodeType == NodeType.TextNode || (this._childArray.length === 0 && this.content !== null);
|
|
98
99
|
}
|
|
@@ -154,37 +155,45 @@ export class DesignItem {
|
|
|
154
155
|
}
|
|
155
156
|
static createDesignItemFromInstance(node, serviceContainer, instanceServiceContainer) {
|
|
156
157
|
let designItem = new DesignItem(node, serviceContainer, instanceServiceContainer);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
158
|
+
if (designItem.nodeType == NodeType.Element) {
|
|
159
|
+
for (let a of designItem.element.attributes) {
|
|
160
|
+
if (a.name !== 'style') {
|
|
161
|
+
designItem.attributes.set(a.name, a.value);
|
|
162
|
+
if (a.name === hideAtDesignTimeAttributeName)
|
|
163
|
+
designItem._hideAtDesignTime = true;
|
|
164
|
+
if (a.name === hideAtRunTimeAttributeName)
|
|
165
|
+
designItem._hideAtRunTime = true;
|
|
166
|
+
if (a.name === lockAtDesignTimeAttributeName)
|
|
167
|
+
designItem._lockAtDesignTime = true;
|
|
168
|
+
}
|
|
169
|
+
if (node instanceof HTMLElement || node instanceof SVGElement) {
|
|
170
|
+
for (let s of node.style) {
|
|
171
|
+
let val = node.style[s];
|
|
172
|
+
if (val && typeof val === 'string')
|
|
173
|
+
designItem.styles.set(s, node.style[s]);
|
|
174
|
+
}
|
|
175
|
+
if (!designItem._lockAtDesignTime)
|
|
176
|
+
node.style.pointerEvents = 'auto';
|
|
177
|
+
else
|
|
178
|
+
node.style.pointerEvents = 'none';
|
|
179
|
+
//node.style.cursor = 'pointer';
|
|
180
|
+
}
|
|
181
|
+
node.draggable = false; //even if it should be true, for better designer exp.
|
|
166
182
|
}
|
|
167
183
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
184
|
+
designItem.updateChildrenFromNodesChildren();
|
|
185
|
+
return designItem;
|
|
186
|
+
}
|
|
187
|
+
updateChildrenFromNodesChildren() {
|
|
188
|
+
this._childArray = [];
|
|
189
|
+
if (this.nodeType == NodeType.Element) {
|
|
190
|
+
if (this.element.children && this.element.children.length === 0 && this.element.childNodes.length <= 1)
|
|
191
|
+
this.content = this.element.textContent; //was soll das bringen???
|
|
192
|
+
else {
|
|
193
|
+
for (const c of this.element.childNodes)
|
|
194
|
+
this._childArray.push(DesignItem.createDesignItemFromInstance(c, this.serviceContainer, this.instanceServiceContainer));
|
|
173
195
|
}
|
|
174
|
-
if (!designItem._lockAtDesignTime)
|
|
175
|
-
node.style.pointerEvents = 'auto';
|
|
176
|
-
else
|
|
177
|
-
node.style.pointerEvents = 'none';
|
|
178
|
-
//node.style.cursor = 'pointer';
|
|
179
196
|
}
|
|
180
|
-
node.draggable = false; //even if it should be true, for better designer exp.
|
|
181
|
-
if (designItem.element.children.length === 0)
|
|
182
|
-
designItem.content = designItem.element.textContent;
|
|
183
|
-
else {
|
|
184
|
-
for (const c of designItem.element.children)
|
|
185
|
-
designItem._childArray.push(DesignItem.createDesignItemFromInstance(c, serviceContainer, instanceServiceContainer));
|
|
186
|
-
}
|
|
187
|
-
return designItem;
|
|
188
197
|
}
|
|
189
198
|
openGroup(title, affectedItems) {
|
|
190
199
|
return this.instanceServiceContainer.undoService.openGroup(title, affectedItems);
|
|
@@ -41,6 +41,9 @@ import { GridPlacementService } from './placementService/GridPlacementService.js
|
|
|
41
41
|
import { ElementAtPointService } from './elementAtPointService/ElementAtPointService';
|
|
42
42
|
import { FlexBoxPlacementService } from './placementService/FlexBoxPlacementService';
|
|
43
43
|
import { SnaplinesProviderService } from './placementService/SnaplinesProviderService';
|
|
44
|
+
import { PrepareElementsForDesignerService } from './instanceService/PrepareElementsForDesignerService';
|
|
45
|
+
import { DragDropService } from './dragDropService/DragDropService';
|
|
46
|
+
import { EditTextExtensionProvider } from '../widgets/designerView/extensions/EditText/EditTextExtensionProvider.js';
|
|
44
47
|
export function createDefaultServiceContainer() {
|
|
45
48
|
let serviceContainer = new ServiceContainer();
|
|
46
49
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -58,6 +61,8 @@ export function createDefaultServiceContainer() {
|
|
|
58
61
|
serviceContainer.register("htmlParserService", new DefaultHtmlParserService());
|
|
59
62
|
serviceContainer.register("bindingService", new PolymerBindingsService());
|
|
60
63
|
serviceContainer.register("elementAtPointService", new ElementAtPointService());
|
|
64
|
+
serviceContainer.register("prepareElementsForDesignerService", new PrepareElementsForDesignerService());
|
|
65
|
+
serviceContainer.register("dragDropService", new DragDropService());
|
|
61
66
|
serviceContainer.designerExtensions.set(ExtensionType.Permanent, [
|
|
62
67
|
new ResizeExtensionProvider(false),
|
|
63
68
|
new InvisibleDivExtensionProvider()
|
|
@@ -87,6 +92,9 @@ export function createDefaultServiceContainer() {
|
|
|
87
92
|
serviceContainer.designerExtensions.set(ExtensionType.ContainerDragOver, [
|
|
88
93
|
new AltToEnterContainerExtensionProvider()
|
|
89
94
|
]);
|
|
95
|
+
serviceContainer.designerExtensions.set(ExtensionType.Doubleclick, [
|
|
96
|
+
new EditTextExtensionProvider()
|
|
97
|
+
]);
|
|
90
98
|
serviceContainer.designerTools.set(NamedTools.Pointer, new PointerTool());
|
|
91
99
|
serviceContainer.designerTools.set(NamedTools.DrawSelection, new RectangleSelectorTool());
|
|
92
100
|
serviceContainer.designerTools.set(NamedTools.DrawPath, new DrawPathTool());
|
|
@@ -18,6 +18,8 @@ import { GlobalContext } from './GlobalContext';
|
|
|
18
18
|
import { IBindingService } from "./bindingsService/IBindingService";
|
|
19
19
|
import { IElementAtPointService } from './elementAtPointService/IElementAtPointService';
|
|
20
20
|
import { ISnaplinesProviderService } from "./placementService/ISnaplinesProviderService.js";
|
|
21
|
+
import { IPrepareElementsForDesignerService } from './instanceService/IPrepareElementsForDesignerService';
|
|
22
|
+
import { IDragDropService } from './dragDropService/IDragDropService';
|
|
21
23
|
interface ServiceNameMap {
|
|
22
24
|
"propertyService": IPropertiesService;
|
|
23
25
|
"containerService": IPlacementService;
|
|
@@ -30,6 +32,8 @@ interface ServiceNameMap {
|
|
|
30
32
|
"intializationService": IIntializationService;
|
|
31
33
|
"bindingService": IBindingService;
|
|
32
34
|
"elementAtPointService": IElementAtPointService;
|
|
35
|
+
"prepareElementsForDesignerService": IPrepareElementsForDesignerService;
|
|
36
|
+
"dragDropService": IDragDropService;
|
|
33
37
|
}
|
|
34
38
|
export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMap> {
|
|
35
39
|
readonly config: {
|
|
@@ -51,5 +55,7 @@ export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMa
|
|
|
51
55
|
get htmlParserService(): IHtmlParserService;
|
|
52
56
|
get intializationService(): IIntializationService;
|
|
53
57
|
get elementAtPointService(): IElementAtPointService;
|
|
58
|
+
get prepareElementsForDesignerService(): IPrepareElementsForDesignerService;
|
|
59
|
+
get dragDropService(): IDragDropService;
|
|
54
60
|
}
|
|
55
61
|
export {};
|
|
@@ -46,4 +46,10 @@ export class ServiceContainer extends BaseServiceContainer {
|
|
|
46
46
|
get elementAtPointService() {
|
|
47
47
|
return this.getLastService('elementAtPointService');
|
|
48
48
|
}
|
|
49
|
+
get prepareElementsForDesignerService() {
|
|
50
|
+
return this.getLastService('prepareElementsForDesignerService');
|
|
51
|
+
}
|
|
52
|
+
get dragDropService() {
|
|
53
|
+
return this.getLastService('dragDropService');
|
|
54
|
+
}
|
|
49
55
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IDesignerView } from "../../widgets/designerView/IDesignerView.js";
|
|
2
|
+
import { IDragDropService } from "./IDragDropService.js";
|
|
3
|
+
export declare class DragDropService implements IDragDropService {
|
|
4
|
+
dragOver(event: DragEvent): 'none' | 'copy' | 'link' | 'move';
|
|
5
|
+
drop(designerView: IDesignerView, event: DragEvent): void;
|
|
6
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DesignItem } from '../../item/DesignItem';
|
|
2
|
+
import { InsertAction } from "../undoService/transactionItems/InsertAction.js";
|
|
3
|
+
export class DragDropService {
|
|
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");
|
|
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
|
+
}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IDesignItem } from "../../item/IDesignItem.js";
|
|
2
|
+
import { IPrepareElementsForDesignerService } from "./IPrepareElementsForDesignerService.js";
|
|
3
|
+
export declare class PrepareElementsForDesignerService implements IPrepareElementsForDesignerService {
|
|
4
|
+
prepareElementsForDesigner(designItem: IDesignItem): void;
|
|
5
|
+
private _prepareElementsForDesigner;
|
|
6
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class PrepareElementsForDesignerService {
|
|
2
|
+
prepareElementsForDesigner(designItem) {
|
|
3
|
+
this._prepareElementsForDesigner([designItem.element]);
|
|
4
|
+
}
|
|
5
|
+
_prepareElementsForDesigner(elements) {
|
|
6
|
+
for (let el of elements) {
|
|
7
|
+
if (el.shadowRoot) {
|
|
8
|
+
this._prepareElementsForDesigner((el.shadowRoot).querySelectorAll('*'));
|
|
9
|
+
}
|
|
10
|
+
if (el instanceof HTMLImageElement) {
|
|
11
|
+
el.draggable = false;
|
|
12
|
+
}
|
|
13
|
+
else if (el instanceof HTMLInputElement) {
|
|
14
|
+
el.onmousedown = (e) => e.preventDefault();
|
|
15
|
+
//const ip = el;
|
|
16
|
+
//el.onclick = (e) => { if (ip.type == 'checkbox') ip.checked = !ip.checked };
|
|
17
|
+
}
|
|
18
|
+
else if (el instanceof HTMLSelectElement) {
|
|
19
|
+
el.onmousedown = (e) => e.preventDefault();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -4,8 +4,8 @@ export class GridPlacementService {
|
|
|
4
4
|
leaveContainer(container, items) {
|
|
5
5
|
}
|
|
6
6
|
serviceForContainer(container) {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
if (container.element.style.display == 'grid' || container.element.style.display == 'inline-grid')
|
|
8
|
+
return true;
|
|
9
9
|
return false;
|
|
10
10
|
}
|
|
11
11
|
canEnter(container, items) {
|
|
@@ -13,6 +13,9 @@ export class InsertAction {
|
|
|
13
13
|
}
|
|
14
14
|
do() {
|
|
15
15
|
this.designItem.insertChild(this.newItem, this.index);
|
|
16
|
+
const prepService = this.designItem.serviceContainer.prepareElementsForDesignerService;
|
|
17
|
+
if (prepService)
|
|
18
|
+
requestAnimationFrame(() => prepService.prepareElementsForDesigner(this.newItem));
|
|
16
19
|
}
|
|
17
20
|
mergeWith(other) {
|
|
18
21
|
return false;
|
|
@@ -20,6 +20,7 @@ export interface IDesignerView extends IPlacementView, IUiCommandHandler {
|
|
|
20
20
|
readonly shadowRoot: ShadowRoot;
|
|
21
21
|
readonly alignOnGrid: boolean;
|
|
22
22
|
readonly alignOnSnap: boolean;
|
|
23
|
+
eatEvents: Element;
|
|
23
24
|
initialize(serviceContainer: ServiceContainer): any;
|
|
24
25
|
getDesignerMousepoint(event: MouseEvent, target: Element, startPoint?: IDesignerMousePoint): IDesignerMousePoint;
|
|
25
26
|
getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): any;
|
|
@@ -25,6 +25,7 @@ export declare class DesignerView extends BaseCustomWebComponentLazyAppend imple
|
|
|
25
25
|
snapLines: Snaplines;
|
|
26
26
|
overlayLayer: OverlayLayerView;
|
|
27
27
|
rootDesignItem: IDesignItem;
|
|
28
|
+
eatEvents: Element;
|
|
28
29
|
private _zoomFactor;
|
|
29
30
|
private _canvas;
|
|
30
31
|
private _canvasContainer;
|
|
@@ -39,6 +40,7 @@ export declare class DesignerView extends BaseCustomWebComponentLazyAppend imple
|
|
|
39
40
|
static readonly style: CSSStyleSheet;
|
|
40
41
|
static readonly template: HTMLTemplateElement;
|
|
41
42
|
extensionManager: IExtensionManager;
|
|
43
|
+
private _onDblClickBound;
|
|
42
44
|
constructor();
|
|
43
45
|
get designerWidth(): string;
|
|
44
46
|
set designerWidth(value: string);
|
|
@@ -60,14 +62,14 @@ export declare class DesignerView extends BaseCustomWebComponentLazyAppend imple
|
|
|
60
62
|
parseHTML(html: string): Promise<void>;
|
|
61
63
|
setDesignItems(designItems: IDesignItem[]): void;
|
|
62
64
|
private _addDesignItems;
|
|
63
|
-
private _removeDraggableOnImages;
|
|
64
|
-
private _removeDraggableOnImagesInner;
|
|
65
65
|
private _onDragEnter;
|
|
66
|
+
private _onDragLeave;
|
|
66
67
|
private _onDragOver;
|
|
67
68
|
private _onDrop;
|
|
68
69
|
private _onWheel;
|
|
69
70
|
private _onContextMenu;
|
|
70
71
|
showDesignItemContextMenu(designItem: IDesignItem, event: MouseEvent): ContextMenuHelper;
|
|
72
|
+
private _onDblClick;
|
|
71
73
|
private onKeyUp;
|
|
72
74
|
private onKeyDown;
|
|
73
75
|
getDesignerMousepoint(event: MouseEvent, target: Element, startPoint?: IDesignerMousePoint): IDesignerMousePoint;
|
|
@@ -56,6 +56,7 @@ export class DesignerView extends BaseCustomWebComponentLazyAppend {
|
|
|
56
56
|
this.extensionManager = new ExtensionManager(this);
|
|
57
57
|
this._onKeyDownBound = this.onKeyDown.bind(this);
|
|
58
58
|
this._onKeyUpBound = this.onKeyUp.bind(this);
|
|
59
|
+
this._onDblClickBound = this._onDblClick.bind(this);
|
|
59
60
|
this._onContextMenuBound = this._onContextMenu.bind(this);
|
|
60
61
|
this._pointerEventHandlerBound = this._pointerEventHandler.bind(this);
|
|
61
62
|
this._canvas.oncontextmenu = this._onContextMenuBound;
|
|
@@ -230,10 +231,12 @@ export class DesignerView extends BaseCustomWebComponentLazyAppend {
|
|
|
230
231
|
this._outercanvas2.addEventListener(EventNames.PointerMove, this._pointerEventHandlerBound);
|
|
231
232
|
this._outercanvas2.addEventListener(EventNames.PointerUp, this._pointerEventHandlerBound);
|
|
232
233
|
this._canvas.addEventListener(EventNames.DragEnter, event => this._onDragEnter(event));
|
|
234
|
+
this._canvas.addEventListener(EventNames.DragLeave, event => this._onDragLeave(event));
|
|
233
235
|
this._canvas.addEventListener(EventNames.DragOver, event => this._onDragOver(event));
|
|
234
236
|
this._canvas.addEventListener(EventNames.Drop, event => this._onDrop(event));
|
|
235
|
-
this._canvas.addEventListener(
|
|
236
|
-
this._canvas.addEventListener(
|
|
237
|
+
this._canvas.addEventListener(EventNames.KeyDown, this._onKeyDownBound, true);
|
|
238
|
+
this._canvas.addEventListener(EventNames.KeyUp, this._onKeyUpBound, true);
|
|
239
|
+
this._canvas.addEventListener(EventNames.DblClick, this._onDblClickBound, true);
|
|
237
240
|
this.addEventListener(EventNames.Wheel, event => this._onWheel(event));
|
|
238
241
|
}
|
|
239
242
|
}
|
|
@@ -279,24 +282,17 @@ export class DesignerView extends BaseCustomWebComponentLazyAppend {
|
|
|
279
282
|
intializationService.init(di);
|
|
280
283
|
}
|
|
281
284
|
this.snapLines.clearSnaplines();
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
this._removeDraggableOnImagesInner(this.rootDesignItem.element.querySelectorAll('*'));
|
|
286
|
-
}
|
|
287
|
-
_removeDraggableOnImagesInner(elements) {
|
|
288
|
-
for (let e of elements) {
|
|
289
|
-
if (e.shadowRoot) {
|
|
290
|
-
this._removeDraggableOnImagesInner((e.shadowRoot).querySelectorAll('*'));
|
|
291
|
-
}
|
|
292
|
-
if (e.localName == 'img') {
|
|
293
|
-
e.draggable = false;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
285
|
+
const prepService = this.serviceContainer.prepareElementsForDesignerService;
|
|
286
|
+
if (prepService)
|
|
287
|
+
requestAnimationFrame(() => prepService.prepareElementsForDesigner(this.rootDesignItem));
|
|
296
288
|
}
|
|
297
289
|
_onDragEnter(event) {
|
|
298
290
|
event.preventDefault();
|
|
299
291
|
}
|
|
292
|
+
_onDragLeave(event) {
|
|
293
|
+
event.preventDefault();
|
|
294
|
+
this._canvas.classList.remove('dragFileActive');
|
|
295
|
+
}
|
|
300
296
|
_onDragOver(event) {
|
|
301
297
|
event.preventDefault();
|
|
302
298
|
/*if (this.alignOnSnap) {
|
|
@@ -306,21 +302,39 @@ export class DesignerView extends BaseCustomWebComponentLazyAppend {
|
|
|
306
302
|
let containerService = this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this.rootDesignItem))
|
|
307
303
|
containerService.finishPlace(this, this.rootDesignItem, this._initialPoint, currentPoint, this.instanceServiceContainer.selectionService.selectedElements);
|
|
308
304
|
}*/
|
|
305
|
+
if (event.dataTransfer.types.length > 0 && event.dataTransfer.types[0] == 'Files') {
|
|
306
|
+
const ddService = this.serviceContainer.dragDropService;
|
|
307
|
+
if (ddService) {
|
|
308
|
+
const effect = ddService.dragOver(event);
|
|
309
|
+
event.dataTransfer.dropEffect = effect;
|
|
310
|
+
if (effect !== 'none')
|
|
311
|
+
this._canvas.classList.add('dragFileActive');
|
|
312
|
+
}
|
|
313
|
+
}
|
|
309
314
|
}
|
|
310
315
|
async _onDrop(event) {
|
|
311
316
|
event.preventDefault();
|
|
312
|
-
this.
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
317
|
+
this._canvas.classList.remove('dragFileActive');
|
|
318
|
+
if (event.dataTransfer.files.length > 0) {
|
|
319
|
+
const ddService = this.serviceContainer.dragDropService;
|
|
320
|
+
if (ddService) {
|
|
321
|
+
ddService.drop(this, event);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
this._fillCalculationrects();
|
|
326
|
+
let transferData = event.dataTransfer.getData(dragDropFormatName);
|
|
327
|
+
let elementDefinition = JSON.parse(transferData);
|
|
328
|
+
let di = await this.serviceContainer.forSomeServicesTillResult("instanceService", (service) => service.getElement(elementDefinition, this.serviceContainer, this.instanceServiceContainer));
|
|
329
|
+
let grp = di.openGroup("Insert");
|
|
330
|
+
di.setStyle('position', 'absolute');
|
|
331
|
+
const targetRect = event.target.getBoundingClientRect();
|
|
332
|
+
di.setStyle('top', event.offsetY + targetRect.top - this.containerBoundingRect.y + 'px');
|
|
333
|
+
di.setStyle('left', event.offsetX + targetRect.left - this.containerBoundingRect.x + 'px');
|
|
334
|
+
this.instanceServiceContainer.undoService.execute(new InsertAction(this.rootDesignItem, this.rootDesignItem.childCount, di));
|
|
335
|
+
grp.commit();
|
|
336
|
+
requestAnimationFrame(() => this.instanceServiceContainer.selectionService.setSelectedElements([di]));
|
|
337
|
+
}
|
|
324
338
|
}
|
|
325
339
|
_onWheel(event) {
|
|
326
340
|
if (event.ctrlKey) {
|
|
@@ -350,7 +364,13 @@ export class DesignerView extends BaseCustomWebComponentLazyAppend {
|
|
|
350
364
|
let ctxMnu = ContextMenuHelper.showContextMenu(null, event, null, mnuItems);
|
|
351
365
|
return ctxMnu;
|
|
352
366
|
}
|
|
367
|
+
_onDblClick(event) {
|
|
368
|
+
event.preventDefault();
|
|
369
|
+
this.extensionManager.applyExtension(this.instanceServiceContainer.selectionService.primarySelection, ExtensionType.Doubleclick);
|
|
370
|
+
}
|
|
353
371
|
onKeyUp(event) {
|
|
372
|
+
if (event.composedPath().indexOf(this.eatEvents) >= 0)
|
|
373
|
+
return;
|
|
354
374
|
switch (event.key) {
|
|
355
375
|
case 'ArrowUp':
|
|
356
376
|
//this._resetPointerEventsForClickThrough();
|
|
@@ -359,6 +379,8 @@ export class DesignerView extends BaseCustomWebComponentLazyAppend {
|
|
|
359
379
|
event.preventDefault();
|
|
360
380
|
}
|
|
361
381
|
onKeyDown(event) {
|
|
382
|
+
if (event.composedPath().indexOf(this.eatEvents) >= 0)
|
|
383
|
+
return;
|
|
362
384
|
//TODO: keyboard events maybe should also be handeled by tools
|
|
363
385
|
if ((event.ctrlKey || event.metaKey) && event.key === 'z' && !event.shiftKey)
|
|
364
386
|
this.executeCommand({ type: CommandType.undo });
|
|
@@ -473,6 +495,8 @@ export class DesignerView extends BaseCustomWebComponentLazyAppend {
|
|
|
473
495
|
}
|
|
474
496
|
_pointerEventHandler(event) {
|
|
475
497
|
var _a, _b;
|
|
498
|
+
if (event.composedPath().indexOf(this.eatEvents) >= 0)
|
|
499
|
+
return;
|
|
476
500
|
if (event.button == 2)
|
|
477
501
|
return;
|
|
478
502
|
let currentElement = this.serviceContainer.elementAtPointService.getElementAtPoint(this, { x: event.x, y: event.y });
|
|
@@ -540,6 +564,11 @@ DesignerView.style = css `
|
|
|
540
564
|
transform-origin: 0 0;
|
|
541
565
|
}
|
|
542
566
|
|
|
567
|
+
#canvas.dragFileActive {
|
|
568
|
+
outline: blue 4px solid;
|
|
569
|
+
outline-offset: -4px;
|
|
570
|
+
}
|
|
571
|
+
|
|
543
572
|
node-projects-overlay-layer-view {
|
|
544
573
|
box-sizing: border-box;
|
|
545
574
|
width: 100%;
|
|
@@ -618,7 +647,7 @@ DesignerView.template = html `
|
|
|
618
647
|
<div id="outercanvas2">
|
|
619
648
|
<div id="canvasContainer">
|
|
620
649
|
<!-- <div id="zoomHelper" style="width: 10px; height: 10px; position: absolute; top: 0; left: 0; pointer-events: none;"></div> -->
|
|
621
|
-
<div id="canvas" tabindex="0"></div>
|
|
650
|
+
<div id="canvas" part="canvas" tabindex="0"></div>
|
|
622
651
|
</div>
|
|
623
652
|
</div>
|
|
624
653
|
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IDesignItem } from "../../../../item/IDesignItem.js";
|
|
2
|
+
import { IDesignerView } from "../../IDesignerView.js";
|
|
3
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
4
|
+
import { IExtensionManager } from "../IExtensionManger.js";
|
|
5
|
+
export declare class EditTextCkEditorExtension extends AbstractExtension {
|
|
6
|
+
private _contentEditedBound;
|
|
7
|
+
private _blurBound;
|
|
8
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerView, extendedItem: IDesignItem);
|
|
9
|
+
extend(): void;
|
|
10
|
+
refresh(): void;
|
|
11
|
+
dispose(): void;
|
|
12
|
+
_contentEdited(): void;
|
|
13
|
+
_blur(): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
2
|
+
import { ExtensionType } from "../ExtensionType.js";
|
|
3
|
+
export class EditTextCkEditorExtension extends AbstractExtension {
|
|
4
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
5
|
+
super(extensionManager, designerView, extendedItem);
|
|
6
|
+
this._contentEditedBound = this._contentEdited.bind(this);
|
|
7
|
+
this._blurBound = this._blur.bind(this);
|
|
8
|
+
}
|
|
9
|
+
extend() {
|
|
10
|
+
//todo -> check what to do with extensions, do not loose edit on mouse click,...
|
|
11
|
+
//maybe use a html edit framework
|
|
12
|
+
this.extendedItem.instanceServiceContainer.selectionService.clearSelectedElements();
|
|
13
|
+
//this.extensionManager.removeExtension(this.extendedItem, ExtensionType.PrimarySelection);
|
|
14
|
+
//this.extensionManager.removeExtension(this.extendedItem, ExtensionType.Selection);
|
|
15
|
+
this.extendedItem.element.addEventListener('input', this._contentEditedBound);
|
|
16
|
+
this.extendedItem.element.addEventListener('blur', this._blurBound);
|
|
17
|
+
this.extendedItem.element.focus();
|
|
18
|
+
this.designerView.eatEvents = this.extendedItem.element;
|
|
19
|
+
//@ts-ignore
|
|
20
|
+
BalloonEditor
|
|
21
|
+
.create(this.extendedItem.element)
|
|
22
|
+
.catch(error => {
|
|
23
|
+
console.error(error);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
refresh() {
|
|
27
|
+
this.dispose();
|
|
28
|
+
}
|
|
29
|
+
dispose() {
|
|
30
|
+
this.extendedItem.element.removeEventListener('input', this._contentEditedBound);
|
|
31
|
+
this.extendedItem.element.removeEventListener('blur', this._blurBound);
|
|
32
|
+
//this.designerView.disableKeyboardEvents = false;
|
|
33
|
+
}
|
|
34
|
+
_contentEdited() {
|
|
35
|
+
//todo -> save???
|
|
36
|
+
//this.extendedItem.content = this.extendedItem.element.innerHTML;
|
|
37
|
+
//console.log(this.extendedItem.element.innerHTML)
|
|
38
|
+
}
|
|
39
|
+
_blur() {
|
|
40
|
+
this.extensionManager.removeExtension(this.extendedItem, ExtensionType.Doubleclick);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from "../IDesignerExtensionProvider";
|
|
2
|
+
import { IDesignItem } from "../../../../item/IDesignItem";
|
|
3
|
+
import { IDesignerView } from "../../IDesignerView";
|
|
4
|
+
import { IDesignerExtension } from "../IDesignerExtension";
|
|
5
|
+
import { IExtensionManager } from "../IExtensionManger";
|
|
6
|
+
export declare class EditTextCkEditorExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerView, designItem: IDesignItem): boolean;
|
|
8
|
+
getExtension(extensionManager: IExtensionManager, designerView: IDesignerView, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
+
}
|
package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { EditTextCkEditorExtension } from "./EditTextCkEditorExtension.js";
|
|
2
|
+
export class EditTextCkEditorExtensionProvider {
|
|
3
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
7
|
+
return new EditTextCkEditorExtension(extensionManager, designerView, designItem);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IDesignItem } from "../../../../item/IDesignItem";
|
|
2
|
+
import { IDesignerView } from "../../IDesignerView";
|
|
3
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
4
|
+
import { IExtensionManager } from "../IExtensionManger";
|
|
5
|
+
export declare class EditTextExtension extends AbstractExtension {
|
|
6
|
+
private _contentEditedBound;
|
|
7
|
+
private _blurBound;
|
|
8
|
+
private static template;
|
|
9
|
+
private _blurTimeout;
|
|
10
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerView, extendedItem: IDesignItem);
|
|
11
|
+
extend(): void;
|
|
12
|
+
refresh(): void;
|
|
13
|
+
dispose(): void;
|
|
14
|
+
_contentEdited(): void;
|
|
15
|
+
_blur(): void;
|
|
16
|
+
_formatSelection(type: string): void;
|
|
17
|
+
}
|