@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
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { html } from "@node-projects/base-custom-webcomponent";
|
|
2
|
+
import { AbstractExtension } from "../AbstractExtension.js";
|
|
3
|
+
import { ExtensionType } from "../ExtensionType.js";
|
|
4
|
+
import { OverlayLayer } from "../OverlayLayer.js";
|
|
5
|
+
export class EditTextExtension extends AbstractExtension {
|
|
6
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
7
|
+
super(extensionManager, designerView, extendedItem);
|
|
8
|
+
this._contentEditedBound = this._contentEdited.bind(this);
|
|
9
|
+
this._blurBound = this._blur.bind(this);
|
|
10
|
+
}
|
|
11
|
+
extend() {
|
|
12
|
+
//todo -> check what to do with extensions, do not loose edit on mouse click,...
|
|
13
|
+
//maybe use a html edit framework
|
|
14
|
+
this.extendedItem.instanceServiceContainer.selectionService.clearSelectedElements();
|
|
15
|
+
//this.extensionManager.removeExtension(this.extendedItem, ExtensionType.PrimarySelection);
|
|
16
|
+
//this.extensionManager.removeExtension(this.extendedItem, ExtensionType.Selection);
|
|
17
|
+
this.extendedItem.element.setAttribute('contenteditable', '');
|
|
18
|
+
this.extendedItem.element.addEventListener('input', this._contentEditedBound);
|
|
19
|
+
this.extendedItem.element.addEventListener('blur', this._blurBound);
|
|
20
|
+
this.extendedItem.element.focus();
|
|
21
|
+
this.designerView.eatEvents = this.extendedItem.element;
|
|
22
|
+
let itemRect = this.extendedItem.element.getBoundingClientRect();
|
|
23
|
+
const elements = EditTextExtension.template.content.cloneNode(true);
|
|
24
|
+
elements.querySelectorAll('button').forEach(x => x.onclick = () => this._formatSelection(x.dataset['command']));
|
|
25
|
+
let foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
|
|
26
|
+
foreignObject.setAttribute('x', '' + (itemRect.x - this.designerView.containerBoundingRect.x));
|
|
27
|
+
foreignObject.setAttribute('y', '' + (itemRect.y - this.designerView.containerBoundingRect.y - 32));
|
|
28
|
+
foreignObject.setAttribute('width', '50');
|
|
29
|
+
foreignObject.setAttribute('height', '32');
|
|
30
|
+
foreignObject.appendChild(elements);
|
|
31
|
+
this.overlayLayerView.addOverlay(foreignObject, OverlayLayer.Foregorund);
|
|
32
|
+
this.overlays.push(foreignObject);
|
|
33
|
+
}
|
|
34
|
+
refresh() {
|
|
35
|
+
this.dispose();
|
|
36
|
+
}
|
|
37
|
+
dispose() {
|
|
38
|
+
this._removeAllOverlays();
|
|
39
|
+
this.extendedItem.element.removeAttribute('contenteditable');
|
|
40
|
+
this.extendedItem.element.removeEventListener('input', this._contentEditedBound);
|
|
41
|
+
this.extendedItem.element.removeEventListener('blur', this._blurBound);
|
|
42
|
+
this.designerView.eatEvents = null;
|
|
43
|
+
this.extendedItem.updateChildrenFromNodesChildren();
|
|
44
|
+
}
|
|
45
|
+
_contentEdited() {
|
|
46
|
+
//todo -> save???
|
|
47
|
+
//this.extendedItem.content = this.extendedItem.element.innerHTML;
|
|
48
|
+
//console.log(this.extendedItem.element.innerHTML)
|
|
49
|
+
}
|
|
50
|
+
_blur() {
|
|
51
|
+
if (!this._blurTimeout) {
|
|
52
|
+
this._blurTimeout = setTimeout(() => {
|
|
53
|
+
this.extensionManager.removeExtension(this.extendedItem, ExtensionType.Doubleclick);
|
|
54
|
+
}, 150);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
_formatSelection(type) {
|
|
58
|
+
if (this._blurTimeout)
|
|
59
|
+
clearTimeout(this._blurTimeout);
|
|
60
|
+
this._blurTimeout = null;
|
|
61
|
+
const selection = this.designerView.shadowRoot.getSelection();
|
|
62
|
+
console.log(selection);
|
|
63
|
+
switch (type) {
|
|
64
|
+
case 'bold':
|
|
65
|
+
document.execCommand('bold', false, null);
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
this.extendedItem.element.focus();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
EditTextExtension.template = html `
|
|
72
|
+
<div style="height: 24px;">
|
|
73
|
+
<button data-command="bold" style="pointer-events: all; height: 24px; width: 24px; padding: 0; font-weight: 900;">b</button>
|
|
74
|
+
<button data-command="italic" style="pointer-events: all; height: 24px; width: 24px; padding: 0;"><em>i</em></button>
|
|
75
|
+
<button data-command="italic" style="pointer-events: all; height: 24px; width: 24px; padding: 0;"><ins>u</ins></button>
|
|
76
|
+
<button data-command="italic" style="pointer-events: all; height: 24px; width: 24px; padding: 0;"><del>s</del></button>
|
|
77
|
+
</div>
|
|
78
|
+
`;
|
|
@@ -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 EditTextExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerView, designItem: IDesignItem): boolean;
|
|
8
|
+
getExtension(extensionManager: IExtensionManager, designerView: IDesignerView, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EditTextExtension } from "./EditTextExtension.js";
|
|
2
|
+
export class EditTextExtensionProvider {
|
|
3
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
4
|
+
if (designItem.name === 'button' || designItem.name === 'input')
|
|
5
|
+
return false;
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
9
|
+
return new EditTextExtension(extensionManager, designerView, designItem);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { IDesignItem } from "../../../../item/IDesignItem";
|
|
2
|
+
import { IDesignerView } from "../../IDesignerView";
|
|
3
|
+
import { AbstractExtension } from '../AbstractExtension';
|
|
4
|
+
import { IExtensionManager } from "../IExtensionManger";
|
|
5
|
+
export declare class EditTextTinyMceExtension extends AbstractExtension {
|
|
6
|
+
private _contentEditedBound;
|
|
7
|
+
private _blurBound;
|
|
8
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerView, extendedItem: IDesignItem);
|
|
9
|
+
tinyMceConfig: {
|
|
10
|
+
target: any;
|
|
11
|
+
menubar: boolean;
|
|
12
|
+
inline: boolean;
|
|
13
|
+
plugins: string[];
|
|
14
|
+
toolbar: string[];
|
|
15
|
+
valid_elements: string;
|
|
16
|
+
valid_styles: {
|
|
17
|
+
'*': string;
|
|
18
|
+
};
|
|
19
|
+
powerpaste_word_import: string;
|
|
20
|
+
powerpaste_html_import: string;
|
|
21
|
+
};
|
|
22
|
+
extend(): void;
|
|
23
|
+
refresh(): void;
|
|
24
|
+
dispose(): void;
|
|
25
|
+
_contentEdited(): void;
|
|
26
|
+
_blur(): void;
|
|
27
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { AbstractExtension } from '../AbstractExtension';
|
|
2
|
+
import { ExtensionType } from "../ExtensionType.js";
|
|
3
|
+
export class EditTextTinyMceExtension extends AbstractExtension {
|
|
4
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
5
|
+
super(extensionManager, designerView, extendedItem);
|
|
6
|
+
this.tinyMceConfig = {
|
|
7
|
+
target: null,
|
|
8
|
+
menubar: false,
|
|
9
|
+
inline: true,
|
|
10
|
+
plugins: [
|
|
11
|
+
'link',
|
|
12
|
+
'lists',
|
|
13
|
+
'powerpaste',
|
|
14
|
+
'autolink',
|
|
15
|
+
'tinymcespellchecker'
|
|
16
|
+
],
|
|
17
|
+
toolbar: [
|
|
18
|
+
'undo redo | bold italic underline | fontselect fontsizeselect',
|
|
19
|
+
'forecolor backcolor | alignleft aligncenter alignright alignfull | numlist bullist outdent indent'
|
|
20
|
+
],
|
|
21
|
+
valid_elements: 'p[style],strong,em,span[style],a[href],ul,ol,li',
|
|
22
|
+
valid_styles: {
|
|
23
|
+
'*': 'font-size,font-family,color,text-decoration,text-align'
|
|
24
|
+
},
|
|
25
|
+
powerpaste_word_import: 'clean',
|
|
26
|
+
powerpaste_html_import: 'clean',
|
|
27
|
+
};
|
|
28
|
+
this._contentEditedBound = this._contentEdited.bind(this);
|
|
29
|
+
this._blurBound = this._blur.bind(this);
|
|
30
|
+
}
|
|
31
|
+
extend() {
|
|
32
|
+
//todo -> check what to do with extensions, do not loose edit on mouse click,...
|
|
33
|
+
//maybe use a html edit framework
|
|
34
|
+
this.extendedItem.instanceServiceContainer.selectionService.clearSelectedElements();
|
|
35
|
+
//this.extensionManager.removeExtension(this.extendedItem, ExtensionType.PrimarySelection);
|
|
36
|
+
//this.extensionManager.removeExtension(this.extendedItem, ExtensionType.Selection);
|
|
37
|
+
this.extendedItem.element.addEventListener('input', this._contentEditedBound);
|
|
38
|
+
this.extendedItem.element.addEventListener('blur', this._blurBound);
|
|
39
|
+
this.extendedItem.element.focus();
|
|
40
|
+
this.designerView.eatEvents = this.extendedItem.element;
|
|
41
|
+
this.tinyMceConfig.target = this.extendedItem.element;
|
|
42
|
+
//@ts-ignore
|
|
43
|
+
tinymce.init(this.tinyMceConfig);
|
|
44
|
+
}
|
|
45
|
+
refresh() {
|
|
46
|
+
this.dispose();
|
|
47
|
+
}
|
|
48
|
+
dispose() {
|
|
49
|
+
this.extendedItem.element.removeEventListener('input', this._contentEditedBound);
|
|
50
|
+
this.extendedItem.element.removeEventListener('blur', this._blurBound);
|
|
51
|
+
//this.designerView.disableKeyboardEvents = false;
|
|
52
|
+
}
|
|
53
|
+
_contentEdited() {
|
|
54
|
+
//todo -> save???
|
|
55
|
+
//this.extendedItem.content = this.extendedItem.element.innerHTML;
|
|
56
|
+
//console.log(this.extendedItem.element.innerHTML)
|
|
57
|
+
}
|
|
58
|
+
_blur() {
|
|
59
|
+
this.extensionManager.removeExtension(this.extendedItem, ExtensionType.Doubleclick);
|
|
60
|
+
}
|
|
61
|
+
}
|
package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.d.ts
ADDED
|
@@ -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 EditTextTinyMceExtensionProvider 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/EditTextTinyMceExtensionProvider.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { EditTextTinyMceExtension } from "./EditTextTinyMceExtension.js";
|
|
2
|
+
export class EditTextTinyMceExtensionProvider {
|
|
3
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
7
|
+
return new EditTextTinyMceExtension(extensionManager, designerView, designItem);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -13,5 +13,9 @@ export declare enum ExtensionType {
|
|
|
13
13
|
/**
|
|
14
14
|
* Extension for the Current Container wich the dragged element is contained.
|
|
15
15
|
*/
|
|
16
|
-
ContainerDrag = 256
|
|
16
|
+
ContainerDrag = 256,
|
|
17
|
+
/**
|
|
18
|
+
* Extension for the Current Container wich the dragged element is contained.
|
|
19
|
+
*/
|
|
20
|
+
Doubleclick = 512
|
|
17
21
|
}
|
|
@@ -15,4 +15,8 @@ export var ExtensionType;
|
|
|
15
15
|
* Extension for the Current Container wich the dragged element is contained.
|
|
16
16
|
*/
|
|
17
17
|
ExtensionType[ExtensionType["ContainerDrag"] = 256] = "ContainerDrag";
|
|
18
|
+
/**
|
|
19
|
+
* Extension for the Current Container wich the dragged element is contained.
|
|
20
|
+
*/
|
|
21
|
+
ExtensionType[ExtensionType["Doubleclick"] = 512] = "Doubleclick";
|
|
18
22
|
})(ExtensionType || (ExtensionType = {}));
|
|
@@ -27,7 +27,7 @@ export class RotateExtension extends AbstractExtension {
|
|
|
27
27
|
g.addEventListener(EventNames.PointerUp, event => this._pointerActionTypeRotate(event));
|
|
28
28
|
g.setAttribute('class', 'svg-selection svg-primary-rotate');
|
|
29
29
|
g.setAttribute('transform', 'translate(' + (itemRect.x - this.designerView.containerBoundingRect.x - 13) + ',' + (itemRect.y - this.designerView.containerBoundingRect.y - 8.5) + ')');
|
|
30
|
-
this.overlayLayerView.
|
|
30
|
+
this.overlayLayerView.addOverlay(g);
|
|
31
31
|
this.overlays.push(g);
|
|
32
32
|
}
|
|
33
33
|
_pointerActionTypeRotate(event) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BaseCustomWebComponentConstructorAppend } from '@node-projects/base-custom-webcomponent';
|
|
2
2
|
import { OverlayLayer } from './extensions/OverlayLayer.js';
|
|
3
3
|
import { ServiceContainer } from '../../services/ServiceContainer';
|
|
4
|
-
export declare class OverlayLayerView extends
|
|
4
|
+
export declare class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
|
|
5
5
|
static readonly template: HTMLTemplateElement;
|
|
6
6
|
static readonly style: CSSStyleSheet;
|
|
7
7
|
static readonly is = "node-projects-overlay-layer-view";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { css, html, BaseCustomWebComponentConstructorAppend } from '@node-projects/base-custom-webcomponent';
|
|
2
2
|
import { OverlayLayer } from './extensions/OverlayLayer.js';
|
|
3
|
-
export class OverlayLayerView extends
|
|
3
|
+
export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
|
|
4
4
|
constructor(serviceContainer) {
|
|
5
5
|
super();
|
|
6
6
|
this._serviceContainer = serviceContainer;
|
|
@@ -62,6 +62,7 @@ OverlayLayerView.style = css `
|
|
|
62
62
|
svg {
|
|
63
63
|
width: 100%;
|
|
64
64
|
height: 100%;
|
|
65
|
+
overflow: visible;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
.svg-snapline { stroke: purple; stroke-dasharray: 4; fill: transparent; }
|
|
@@ -3,9 +3,13 @@ export declare enum EventNames {
|
|
|
3
3
|
PointerMove = "pointermove",
|
|
4
4
|
PointerUp = "pointerup",
|
|
5
5
|
DragEnter = "dragenter",
|
|
6
|
+
DragLeave = "dragleave",
|
|
6
7
|
DragOver = "dragover",
|
|
7
8
|
Drop = "drop",
|
|
8
9
|
Scroll = "scroll",
|
|
9
10
|
Wheel = "wheel",
|
|
10
|
-
ContextMenu = "contextmenu"
|
|
11
|
+
ContextMenu = "contextmenu",
|
|
12
|
+
KeyDown = "keydown",
|
|
13
|
+
KeyUp = "keyup",
|
|
14
|
+
DblClick = "dblclick"
|
|
11
15
|
}
|
package/dist/enums/EventNames.js
CHANGED
|
@@ -4,9 +4,13 @@ export var EventNames;
|
|
|
4
4
|
EventNames["PointerMove"] = "pointermove";
|
|
5
5
|
EventNames["PointerUp"] = "pointerup";
|
|
6
6
|
EventNames["DragEnter"] = "dragenter";
|
|
7
|
+
EventNames["DragLeave"] = "dragleave";
|
|
7
8
|
EventNames["DragOver"] = "dragover";
|
|
8
9
|
EventNames["Drop"] = "drop";
|
|
9
10
|
EventNames["Scroll"] = "scroll";
|
|
10
11
|
EventNames["Wheel"] = "wheel";
|
|
11
12
|
EventNames["ContextMenu"] = "contextmenu";
|
|
13
|
+
EventNames["KeyDown"] = "keydown";
|
|
14
|
+
EventNames["KeyUp"] = "keyup";
|
|
15
|
+
EventNames["DblClick"] = "dblclick";
|
|
12
16
|
})(EventNames || (EventNames = {}));
|
package/dist/index.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export type { IElementAtPointService } from "./elements/services/elementAtPointS
|
|
|
27
27
|
export * from "./elements/services/contentService/ContentService.js";
|
|
28
28
|
export type { IContentChanged } from "./elements/services/contentService/IContentChanged.js";
|
|
29
29
|
export type { IContentService } from "./elements/services/contentService/IContentService.js";
|
|
30
|
+
export * from "./elements/services/dragDropService/DragDropService.js";
|
|
31
|
+
export type { IDragDropService } from "./elements/services/dragDropService/IDragDropService.js";
|
|
30
32
|
export type { IElementDefinition } from "./elements/services/elementsService/IElementDefinition.js";
|
|
31
33
|
export type { IElementsJson } from "./elements/services/elementsService/IElementsJson.js";
|
|
32
34
|
export type { IElementsService } from "./elements/services/elementsService/IElementsService.js";
|
|
@@ -40,6 +42,8 @@ export type { IHtmlParserService } from "./elements/services/htmlParserService/I
|
|
|
40
42
|
export type { IIntializationService } from "./elements/services/initializationService/IIntializationService.js";
|
|
41
43
|
export * from "./elements/services/instanceService/DefaultInstanceService.js";
|
|
42
44
|
export type { IInstanceService } from "./elements/services/instanceService/IInstanceService.js";
|
|
45
|
+
export * from "./elements/services/instanceService/PrepareElementsForDesignerService.js";
|
|
46
|
+
export type { IPrepareElementsForDesignerService } from "./elements/services/instanceService/IPrepareElementsForDesignerService.js";
|
|
43
47
|
export * from "./elements/services/propertiesService/DefaultEditorTypesService.js";
|
|
44
48
|
export type { IEditorTypesService } from "./elements/services/propertiesService/IEditorTypesService.js";
|
|
45
49
|
export type { IPropertiesService } from "./elements/services/propertiesService/IPropertiesService.js";
|
package/dist/index.js
CHANGED
|
@@ -18,11 +18,13 @@ export * from "./elements/services/placementService/GridPlacementService.js";
|
|
|
18
18
|
export * from "./elements/services/placementService/SnaplinesProviderService.js";
|
|
19
19
|
export * from "./elements/services/elementAtPointService/ElementAtPointService.js";
|
|
20
20
|
export * from "./elements/services/contentService/ContentService.js";
|
|
21
|
+
export * from "./elements/services/dragDropService/DragDropService.js";
|
|
21
22
|
export * from "./elements/services/elementsService/JsonFileElementsService.js";
|
|
22
23
|
export * from "./elements/services/htmlWriterService/HtmlWriterService.js";
|
|
23
24
|
export * from "./elements/services/htmlParserService/DefaultHtmlParserService.js";
|
|
24
25
|
export * from "./elements/services/htmlParserService/NodeHtmlParserService.js";
|
|
25
26
|
export * from "./elements/services/instanceService/DefaultInstanceService.js";
|
|
27
|
+
export * from "./elements/services/instanceService/PrepareElementsForDesignerService.js";
|
|
26
28
|
export * from "./elements/services/propertiesService/DefaultEditorTypesService.js";
|
|
27
29
|
export * from "./elements/services/propertiesService/services/BaseCustomWebComponentPropertiesService.js";
|
|
28
30
|
export * from "./elements/services/propertiesService/services/CommonPropertiesService.js";
|
package/package.json
CHANGED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { ServiceContainer } from '../services/ServiceContainer';
|
|
2
|
-
export declare class CustomElementsManifestLoader {
|
|
3
|
-
static loadManifest(serviceContainer: ServiceContainer, nodeModule: string, options?: {
|
|
4
|
-
name?: string;
|
|
5
|
-
dontLoadWidgets?: boolean;
|
|
6
|
-
dontLoadProperties?: boolean;
|
|
7
|
-
}): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { LazyLoader } from '@node-projects/base-custom-webcomponent';
|
|
2
|
-
import { PreDefinedElementsService } from '../services/elementsService/PreDefinedElementsService';
|
|
3
|
-
import { ListPropertiesService } from '../services/propertiesService/services/ListPropertiesService';
|
|
4
|
-
export class CustomElementsManifestLoader {
|
|
5
|
-
static async loadManifest(serviceContainer, nodeModule, options) {
|
|
6
|
-
const nodePath = './node_modules/';
|
|
7
|
-
const packageJson = JSON.parse(await LazyLoader.LoadText(nodePath + nodeModule + '/package.json'));
|
|
8
|
-
let jsModule = nodePath + nodeModule + '/' + packageJson.main;
|
|
9
|
-
if (packageJson.module)
|
|
10
|
-
jsModule = nodePath + nodeModule + '/' + packageJson.module;
|
|
11
|
-
const manifest = JSON.parse(await LazyLoader.LoadText(nodePath + nodeModule + '/' + packageJson.customElements));
|
|
12
|
-
let name = nodeModule;
|
|
13
|
-
if (options && options.name)
|
|
14
|
-
name = options.name;
|
|
15
|
-
if (!options || !options.dontLoadWidgets) {
|
|
16
|
-
const elementDefinitions = [];
|
|
17
|
-
for (const tag of manifest.tags) {
|
|
18
|
-
const elementDefinition = { tag: tag.name, import: jsModule, description: tag.description };
|
|
19
|
-
elementDefinitions.push(elementDefinition);
|
|
20
|
-
}
|
|
21
|
-
const service = new PreDefinedElementsService(name, { elements: elementDefinitions });
|
|
22
|
-
serviceContainer.register('elementsService', service);
|
|
23
|
-
}
|
|
24
|
-
if (!options || !options.dontLoadProperties) {
|
|
25
|
-
const propertyDefinitions = {};
|
|
26
|
-
for (const tag of manifest.tags) {
|
|
27
|
-
const attributes = [];
|
|
28
|
-
for (const attr of tag.attributes) {
|
|
29
|
-
let propertyDefinition = { name: attr.name, default: attr.default, description: attr.description };
|
|
30
|
-
if (attr.type && attr.type.startsWith('"')) {
|
|
31
|
-
propertyDefinition.type = 'list';
|
|
32
|
-
propertyDefinition.values = attr.type.split('|');
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
propertyDefinition.type = attr.type;
|
|
36
|
-
}
|
|
37
|
-
attributes.push(propertyDefinition);
|
|
38
|
-
}
|
|
39
|
-
propertyDefinitions[tag.name] = attributes;
|
|
40
|
-
}
|
|
41
|
-
const service = new ListPropertiesService(propertyDefinitions);
|
|
42
|
-
serviceContainer.register('propertyService', service);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
export interface ICustomElementsManifest {
|
|
2
|
-
version: string;
|
|
3
|
-
tags: IOldCustomElementsManifestTag[];
|
|
4
|
-
}
|
|
5
|
-
export interface IOldCustomElementsManifestTag {
|
|
6
|
-
name: string;
|
|
7
|
-
path: string;
|
|
8
|
-
description?: string;
|
|
9
|
-
attributes?: IOldCustomElementsManifestAttribute[];
|
|
10
|
-
properties?: IOldCustomElementsManifestProperty[];
|
|
11
|
-
}
|
|
12
|
-
export interface IOldCustomElementsManifestAttribute {
|
|
13
|
-
name: string;
|
|
14
|
-
description?: string;
|
|
15
|
-
type: string;
|
|
16
|
-
default?: string;
|
|
17
|
-
}
|
|
18
|
-
export interface IOldCustomElementsManifestProperty {
|
|
19
|
-
name: string;
|
|
20
|
-
attribute?: string;
|
|
21
|
-
description?: string;
|
|
22
|
-
type: string;
|
|
23
|
-
default?: string;
|
|
24
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
export interface IOldCustomElementsManifest {
|
|
2
|
-
version: string;
|
|
3
|
-
tags: IOldCustomElementsManifestTag[];
|
|
4
|
-
}
|
|
5
|
-
export interface IOldCustomElementsManifestTag {
|
|
6
|
-
name: string;
|
|
7
|
-
path: string;
|
|
8
|
-
description?: string;
|
|
9
|
-
attributes?: IOldCustomElementsManifestAttribute[];
|
|
10
|
-
properties?: IOldCustomElementsManifestProperty[];
|
|
11
|
-
}
|
|
12
|
-
export interface IOldCustomElementsManifestAttribute {
|
|
13
|
-
name: string;
|
|
14
|
-
description?: string;
|
|
15
|
-
type: string;
|
|
16
|
-
default?: string;
|
|
17
|
-
}
|
|
18
|
-
export interface IOldCustomElementsManifestProperty {
|
|
19
|
-
name: string;
|
|
20
|
-
attribute?: string;
|
|
21
|
-
description?: string;
|
|
22
|
-
type: string;
|
|
23
|
-
default?: string;
|
|
24
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { ServiceContainer } from '../services/ServiceContainer';
|
|
2
|
-
export declare class OldCustomElementsManifestLoader {
|
|
3
|
-
static loadManifest(serviceContainer: ServiceContainer, nodeModule: string, options?: {
|
|
4
|
-
name?: string;
|
|
5
|
-
dontLoadWidgets?: boolean;
|
|
6
|
-
dontLoadProperties?: boolean;
|
|
7
|
-
}): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { LazyLoader } from '@node-projects/base-custom-webcomponent';
|
|
2
|
-
import { PreDefinedElementsService } from '../services/elementsService/PreDefinedElementsService';
|
|
3
|
-
import { ListPropertiesService } from '../services/propertiesService/services/ListPropertiesService';
|
|
4
|
-
export class OldCustomElementsManifestLoader {
|
|
5
|
-
static async loadManifest(serviceContainer, nodeModule, options) {
|
|
6
|
-
const nodePath = './node_modules/';
|
|
7
|
-
const packageJson = JSON.parse(await LazyLoader.LoadText(nodePath + nodeModule + '/package.json'));
|
|
8
|
-
let jsModule = nodePath + nodeModule + '/' + packageJson.main;
|
|
9
|
-
if (packageJson.module)
|
|
10
|
-
jsModule = nodePath + nodeModule + '/' + packageJson.module;
|
|
11
|
-
const manifest = JSON.parse(await LazyLoader.LoadText(nodePath + nodeModule + '/' + packageJson.customElementsManifest));
|
|
12
|
-
let name = nodeModule;
|
|
13
|
-
if (options && options.name)
|
|
14
|
-
name = options.name;
|
|
15
|
-
if (!options || !options.dontLoadWidgets) {
|
|
16
|
-
const elementDefinitions = [];
|
|
17
|
-
for (const tag of manifest.tags) {
|
|
18
|
-
const elementDefinition = { tag: tag.name, import: jsModule, description: tag.description };
|
|
19
|
-
elementDefinitions.push(elementDefinition);
|
|
20
|
-
}
|
|
21
|
-
const service = new PreDefinedElementsService(name, { elements: elementDefinitions });
|
|
22
|
-
serviceContainer.register('elementsService', service);
|
|
23
|
-
}
|
|
24
|
-
if (!options || !options.dontLoadProperties) {
|
|
25
|
-
const propertyDefinitions = {};
|
|
26
|
-
for (const tag of manifest.tags) {
|
|
27
|
-
const attributes = [];
|
|
28
|
-
for (const attr of tag.attributes) {
|
|
29
|
-
let propertyDefinition = { name: attr.name, default: attr.default, description: attr.description };
|
|
30
|
-
if (attr.type && attr.type.startsWith('"')) {
|
|
31
|
-
propertyDefinition.type = 'list';
|
|
32
|
-
propertyDefinition.values = attr.type.split('|');
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
propertyDefinition.type = attr.type;
|
|
36
|
-
}
|
|
37
|
-
attributes.push(propertyDefinition);
|
|
38
|
-
}
|
|
39
|
-
propertyDefinitions[tag.name] = attributes;
|
|
40
|
-
}
|
|
41
|
-
const service = new ListPropertiesService(propertyDefinitions);
|
|
42
|
-
serviceContainer.register('propertyService', service);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { IPoint } from '../../../interfaces/IPoint.js';
|
|
2
|
-
import type { IPlacementService } from './IPlacementService.js';
|
|
3
|
-
import type { IDesignItem } from '../../item/IDesignItem.js';
|
|
4
|
-
import { IDesignerMousePoint } from '../../../interfaces/IDesignerMousePoint.js';
|
|
5
|
-
import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
|
|
6
|
-
export declare class DefaultPlacementService implements IPlacementService {
|
|
7
|
-
serviceForContainer(container: IDesignItem): boolean;
|
|
8
|
-
canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
9
|
-
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
10
|
-
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
11
|
-
private calculateTrack;
|
|
12
|
-
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IDesignerMousePoint, newPoint: IDesignerMousePoint, items: IDesignItem[]): IPoint;
|
|
13
|
-
place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IDesignerMousePoint, newPoint: IDesignerMousePoint, items: IDesignItem[]): void;
|
|
14
|
-
enterContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
15
|
-
leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
16
|
-
finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IDesignerMousePoint, newPoint: IDesignerMousePoint, items: IDesignItem[]): void;
|
|
17
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { DomConverter } from '../../widgets/designerView/DomConverter.js';
|
|
2
|
-
export class DefaultPlacementService {
|
|
3
|
-
serviceForContainer(container) {
|
|
4
|
-
if (container.element.style.display === 'grid' || container.element.style.display === 'inline-grid' ||
|
|
5
|
-
container.element.style.display === 'flex' || container.element.style.display === 'inline-flex')
|
|
6
|
-
return false;
|
|
7
|
-
return true;
|
|
8
|
-
}
|
|
9
|
-
canEnter(container, items) {
|
|
10
|
-
if (DomConverter.IsSelfClosingElement(container.element.localName))
|
|
11
|
-
return false;
|
|
12
|
-
if (container.element.shadowRoot && container.element.shadowRoot.querySelector('slot') == null)
|
|
13
|
-
return false;
|
|
14
|
-
return true;
|
|
15
|
-
}
|
|
16
|
-
canLeave(container, items) {
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
getElementOffset(container, designItem) {
|
|
20
|
-
return container.element.getBoundingClientRect();
|
|
21
|
-
}
|
|
22
|
-
calculateTrack(event, placementView, startPoint, newPoint, item) {
|
|
23
|
-
let trackX = newPoint.x - startPoint.x;
|
|
24
|
-
let trackY = newPoint.y - startPoint.y;
|
|
25
|
-
if (!event.ctrlKey) {
|
|
26
|
-
if (placementView.alignOnGrid) {
|
|
27
|
-
trackX = Math.round(trackX / placementView.gridSize) * placementView.gridSize;
|
|
28
|
-
trackY = Math.round(trackY / placementView.gridSize) * placementView.gridSize;
|
|
29
|
-
}
|
|
30
|
-
else if (placementView.alignOnSnap) {
|
|
31
|
-
let rect = item.element.getBoundingClientRect();
|
|
32
|
-
let newPos = placementView.snapLines.snapToPosition({ x: newPoint.originalX - startPoint.offsetInControlX, y: newPoint.originalY - startPoint.offsetInControlY }, { width: rect.width, height: rect.height }, { x: trackX > 0 ? 1 : -1, y: trackY > 0 ? 1 : -1 });
|
|
33
|
-
if (newPos.x !== null) {
|
|
34
|
-
trackX = newPos.x - Math.round(startPoint.originalX) + Math.round(startPoint.offsetInControlX);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
trackX = Math.round(trackX);
|
|
38
|
-
}
|
|
39
|
-
if (newPos.y !== null) {
|
|
40
|
-
trackY = newPos.y - Math.round(startPoint.originalY) + Math.round(startPoint.offsetInControlY);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
trackY = Math.round(trackY);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return { x: trackX, y: trackY };
|
|
48
|
-
}
|
|
49
|
-
placePoint(event, placementView, container, startPoint, newPoint, items) {
|
|
50
|
-
let trackX = newPoint.x;
|
|
51
|
-
let trackY = newPoint.y;
|
|
52
|
-
if (!event.ctrlKey) {
|
|
53
|
-
if (placementView.alignOnGrid) {
|
|
54
|
-
trackX = Math.round(trackX / placementView.gridSize) * placementView.gridSize;
|
|
55
|
-
trackY = Math.round(trackY / placementView.gridSize) * placementView.gridSize;
|
|
56
|
-
}
|
|
57
|
-
else if (placementView.alignOnSnap) {
|
|
58
|
-
let newPos = placementView.snapLines.snapToPosition({ x: newPoint.originalX - startPoint.offsetInControlX, y: newPoint.originalY - startPoint.offsetInControlY }, null, { x: trackX > 0 ? 1 : -1, y: trackY > 0 ? 1 : -1 });
|
|
59
|
-
if (newPos.x !== null) {
|
|
60
|
-
trackX = newPos.x;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
trackX = Math.round(trackX);
|
|
64
|
-
}
|
|
65
|
-
if (newPos.y !== null) {
|
|
66
|
-
trackY = newPos.y;
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
trackY = Math.round(trackY);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return { x: trackX, y: trackY };
|
|
74
|
-
}
|
|
75
|
-
place(event, placementView, container, startPoint, newPoint, items) {
|
|
76
|
-
//TODO:, this should revert all undo actions while active
|
|
77
|
-
//maybe a undo actions returns itself or an id so it could be changed?
|
|
78
|
-
let track = this.calculateTrack(event, placementView, startPoint, newPoint, items[0]);
|
|
79
|
-
//TODO: -> what is if a transform already exists -> backup existing style.?
|
|
80
|
-
for (const designItem of items) {
|
|
81
|
-
designItem.element.style.transform = 'translate(' + track.x + 'px, ' + track.y + 'px)';
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
enterContainer(container, items) {
|
|
85
|
-
}
|
|
86
|
-
leaveContainer(container, items) {
|
|
87
|
-
}
|
|
88
|
-
finishPlace(event, placementView, container, startPoint, newPoint, items) {
|
|
89
|
-
let track = this.calculateTrack(event, placementView, startPoint, newPoint, items[0]);
|
|
90
|
-
for (const designItem of items) {
|
|
91
|
-
let movedElement = designItem.element;
|
|
92
|
-
let oldLeft = parseInt(movedElement.style.left);
|
|
93
|
-
oldLeft = Number.isNaN(oldLeft) ? 0 : oldLeft;
|
|
94
|
-
let oldTop = parseInt(movedElement.style.top);
|
|
95
|
-
oldTop = Number.isNaN(oldTop) ? 0 : oldTop;
|
|
96
|
-
//let oldPosition = movedElement.style.position;
|
|
97
|
-
designItem.element.style.transform = null;
|
|
98
|
-
designItem.setStyle('position', 'absolute');
|
|
99
|
-
designItem.setStyle('left', (track.x + oldLeft) + "px");
|
|
100
|
-
designItem.setStyle('top', (track.y + oldTop) + "px");
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|