@node-projects/web-component-designer 0.0.141 → 0.0.143
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/README.md +10 -2
- package/dist/elements/helper/ArrangeHelper.d.ts +2 -2
- package/dist/elements/helper/ArrangeHelper.js +49 -23
- package/dist/elements/helper/ElementHelper.d.ts +1 -0
- package/dist/elements/helper/ElementHelper.js +3 -0
- package/dist/elements/services/ServiceContainer.js +2 -2
- package/dist/elements/services/htmlWriterService/HtmlWriterService.d.ts +1 -0
- package/dist/elements/services/htmlWriterService/HtmlWriterService.js +14 -8
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.d.ts +3 -2
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +5 -2
- package/dist/elements/services/modelCommandService/DefaultModelCommandService.js +6 -6
- package/dist/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.d.ts +8 -0
- package/dist/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.js +47 -0
- package/dist/elements/services/propertiesService/services/AbstractPropertiesService.d.ts +20 -0
- package/dist/elements/services/propertiesService/services/AbstractPropertiesService.js +162 -0
- package/dist/elements/services/propertiesService/services/BaseCustomWebComponentPropertiesService.d.ts +2 -2
- package/dist/elements/services/propertiesService/services/BaseCustomWebComponentPropertiesService.js +2 -2
- package/dist/elements/services/propertiesService/services/CommonPropertiesService.d.ts +2 -12
- package/dist/elements/services/propertiesService/services/CommonPropertiesService.js +2 -81
- package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +2 -11
- package/dist/elements/services/propertiesService/services/CssPropertiesService.js +3 -72
- package/dist/elements/services/propertiesService/services/ListPropertiesService.d.ts +3 -2
- package/dist/elements/services/propertiesService/services/ListPropertiesService.js +5 -2
- package/dist/elements/services/propertiesService/services/Lit2PropertiesService.d.ts +2 -2
- package/dist/elements/services/propertiesService/services/Lit2PropertiesService.js +2 -2
- package/dist/elements/services/propertiesService/services/LitElementPropertiesService.d.ts +2 -2
- package/dist/elements/services/propertiesService/services/LitElementPropertiesService.js +2 -2
- package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.js +6 -0
- package/dist/elements/services/propertiesService/services/PolymerPropertiesService.d.ts +2 -2
- package/dist/elements/services/propertiesService/services/PolymerPropertiesService.js +2 -2
- package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.d.ts +4 -4
- package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.js +95 -50
- package/dist/elements/services/propertiesService/services/WebcomponentManifestPropertiesService.d.ts +3 -2
- package/dist/elements/services/propertiesService/services/WebcomponentManifestPropertiesService.js +5 -2
- package/dist/elements/widgets/codeView/code-view-monaco copy.d.ts +25 -0
- package/dist/elements/widgets/codeView/code-view-monaco copy.js +119 -0
- package/dist/elements/widgets/codeView/code-view-simple.d.ts +23 -0
- package/dist/elements/widgets/codeView/code-view-simple.js +55 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.d.ts +9 -2
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +20 -4
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextWithStyloExtension.d.ts +4 -1
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextWithStyloExtension.js +10 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +2 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +4 -0
- package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +2 -1
- package/dist/elements/widgets/designerView/tools/TextTool.d.ts +4 -1
- package/dist/elements/widgets/designerView/tools/TextTool.js +31 -15
- package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbar.d.ts +3 -0
- package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbar.js +18 -0
- package/dist/elements/widgets/designerView/tools/toolBar/popups/DrawToolPopup.js +54 -2
- package/dist/elements/widgets/paletteView/paletteView.js +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# web-component-designer
|
|
2
2
|
|
|
3
|
-
```
|
|
3
|
+
```It#s now considered beta. It works, we use it in production, but there are many more features to come```
|
|
4
4
|
|
|
5
5
|
A HTML web component for designing web components and HTML pages based on PolymerLabs wizzywid which can easily be integrated in your own software.
|
|
6
6
|
Meanwhile polymer is not used anymore.
|
|
@@ -9,7 +9,15 @@ Meanwhile polymer is not used anymore.
|
|
|
9
9
|
|
|
10
10
|
## NPM Package
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
https://www.npmjs.com/package/@node-projects/web-component-designer
|
|
13
|
+
|
|
14
|
+
npm i @node-projects/web-component-designer
|
|
15
|
+
|
|
16
|
+
## Browser support
|
|
17
|
+
|
|
18
|
+
- At the moment Chrome, and Firefox Nightly with Experimental Import Assertions enabled.
|
|
19
|
+
But when import Assertions are landing in Safari and Firefox they will work again.
|
|
20
|
+
And you could transpile them away in the meantime.
|
|
13
21
|
|
|
14
22
|
## Demo
|
|
15
23
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { IDesignerCanvas } from "../..";
|
|
1
|
+
import { IDesignerCanvas, IDesignItem } from "../..";
|
|
2
2
|
import { Orientation } from "../../enums/Orientation";
|
|
3
3
|
export declare abstract class ArrangeHelper {
|
|
4
|
-
static arrangeElements(orientation: Orientation, designerCanvas: IDesignerCanvas): void;
|
|
4
|
+
static arrangeElements(orientation: Orientation, designerCanvas: IDesignerCanvas, arrangeElements: IDesignItem[]): void;
|
|
5
5
|
private static arrange;
|
|
6
6
|
private static formGroup;
|
|
7
7
|
}
|
|
@@ -1,60 +1,86 @@
|
|
|
1
1
|
import { Orientation } from "../../enums/Orientation";
|
|
2
2
|
export class ArrangeHelper {
|
|
3
|
-
static arrangeElements(orientation, designerCanvas) {
|
|
3
|
+
static arrangeElements(orientation, designerCanvas, arrangeElements) {
|
|
4
4
|
switch (orientation) {
|
|
5
5
|
case Orientation.TOP: {
|
|
6
6
|
const grp = this.formGroup(ArrangeDirection.TOP, designerCanvas);
|
|
7
|
-
const
|
|
8
|
-
for (let elem of
|
|
9
|
-
|
|
7
|
+
const primaryCoordinates = designerCanvas.getNormalizedElementCoordinates(arrangeElements[0].element);
|
|
8
|
+
for (let elem of arrangeElements) {
|
|
9
|
+
let selectedCoordinates = designerCanvas.getNormalizedElementCoordinates(elem.element);
|
|
10
|
+
if (primaryCoordinates.y != selectedCoordinates.y) {
|
|
11
|
+
let parent = designerCanvas.getNormalizedElementCoordinates(elem.parent.element);
|
|
12
|
+
let top = primaryCoordinates.y - parent.y;
|
|
13
|
+
this.arrange(elem, 'top', top + "px");
|
|
14
|
+
}
|
|
10
15
|
}
|
|
11
16
|
grp.commit();
|
|
12
17
|
break;
|
|
13
18
|
}
|
|
14
19
|
case Orientation.RIGHT: {
|
|
15
20
|
const grp = this.formGroup(ArrangeDirection.RIGHT, designerCanvas);
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
const primaryCoordinates = designerCanvas.getNormalizedElementCoordinates(arrangeElements[0].element);
|
|
22
|
+
for (let elem of arrangeElements) {
|
|
23
|
+
let selectedCoordinates = designerCanvas.getNormalizedElementCoordinates(elem.element);
|
|
24
|
+
if (primaryCoordinates.x != selectedCoordinates.x) {
|
|
25
|
+
let parent = designerCanvas.getNormalizedElementCoordinates(elem.parent.element);
|
|
26
|
+
let right = primaryCoordinates.x - parent.x;
|
|
27
|
+
this.arrange(elem, 'left', right + "px");
|
|
28
|
+
}
|
|
20
29
|
}
|
|
21
30
|
grp.commit();
|
|
22
31
|
break;
|
|
23
32
|
}
|
|
24
33
|
case Orientation.BOTTOM:
|
|
25
34
|
const grp = this.formGroup(ArrangeDirection.BOTTOM, designerCanvas);
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
35
|
+
const primaryCoordinates = designerCanvas.getNormalizedElementCoordinates(arrangeElements[0].element);
|
|
36
|
+
for (let elem of arrangeElements) {
|
|
37
|
+
let selectedCoordinates = designerCanvas.getNormalizedElementCoordinates(elem.element);
|
|
38
|
+
if (primaryCoordinates.y != selectedCoordinates.y) {
|
|
39
|
+
let parent = designerCanvas.getNormalizedElementCoordinates(elem.parent.element);
|
|
40
|
+
let bottom = primaryCoordinates.y - parent.y;
|
|
41
|
+
this.arrange(elem, 'top', bottom + "px");
|
|
42
|
+
}
|
|
30
43
|
}
|
|
31
44
|
grp.commit();
|
|
32
45
|
break;
|
|
33
46
|
case Orientation.LEFT: {
|
|
34
47
|
const grp = this.formGroup(ArrangeDirection.LEFT, designerCanvas);
|
|
35
|
-
const
|
|
36
|
-
for (let elem of
|
|
37
|
-
|
|
48
|
+
const primaryCoordinates = designerCanvas.getNormalizedElementCoordinates(arrangeElements[0].element);
|
|
49
|
+
for (let elem of arrangeElements) {
|
|
50
|
+
let selectedCoordinates = designerCanvas.getNormalizedElementCoordinates(elem.element);
|
|
51
|
+
if (primaryCoordinates.x != selectedCoordinates.x) {
|
|
52
|
+
let parent = designerCanvas.getNormalizedElementCoordinates(elem.parent.element);
|
|
53
|
+
let left = primaryCoordinates.x - parent.x;
|
|
54
|
+
this.arrange(elem, 'left', left + "px");
|
|
55
|
+
}
|
|
38
56
|
}
|
|
39
57
|
grp.commit();
|
|
40
58
|
break;
|
|
41
59
|
}
|
|
42
60
|
case Orientation.VERTICAL_CENTER: {
|
|
43
61
|
const grp = this.formGroup(ArrangeDirection.VERTICAL_CENTER, designerCanvas);
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
62
|
+
const primaryCoordinates = designerCanvas.getNormalizedElementCoordinates(arrangeElements[0].element);
|
|
63
|
+
for (let elem of arrangeElements) {
|
|
64
|
+
let selectedCoordinates = designerCanvas.getNormalizedElementCoordinates(elem.element);
|
|
65
|
+
if (primaryCoordinates.y != selectedCoordinates.y) {
|
|
66
|
+
let parent = designerCanvas.getNormalizedElementCoordinates(elem.parent.element);
|
|
67
|
+
let center = primaryCoordinates.y - parent.y + (primaryCoordinates.height / 2) - (selectedCoordinates.height / 2);
|
|
68
|
+
this.arrange(elem, 'top', center + "px");
|
|
69
|
+
}
|
|
48
70
|
}
|
|
49
71
|
grp.commit();
|
|
50
72
|
break;
|
|
51
73
|
}
|
|
52
74
|
case Orientation.HORIZONTAL_CENTER: {
|
|
53
75
|
const grp = this.formGroup(ArrangeDirection.HORIZONTAL_CENTER, designerCanvas);
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
76
|
+
const primaryCoordinates = designerCanvas.getNormalizedElementCoordinates(arrangeElements[0].element);
|
|
77
|
+
for (let elem of arrangeElements) {
|
|
78
|
+
let selectedCoordinates = designerCanvas.getNormalizedElementCoordinates(elem.element);
|
|
79
|
+
if (primaryCoordinates.x != selectedCoordinates.x) {
|
|
80
|
+
let parent = designerCanvas.getNormalizedElementCoordinates(elem.parent.element);
|
|
81
|
+
let center = primaryCoordinates.x - parent.x + (primaryCoordinates.width / 2) - (selectedCoordinates.width / 2);
|
|
82
|
+
this.arrange(elem, 'left', center + "px");
|
|
83
|
+
}
|
|
58
84
|
}
|
|
59
85
|
grp.commit();
|
|
60
86
|
break;
|
|
@@ -5,6 +5,7 @@ export declare enum ElementDisplayType {
|
|
|
5
5
|
block = 2
|
|
6
6
|
}
|
|
7
7
|
export declare function isInline(element: HTMLElement): boolean;
|
|
8
|
+
export declare function isInlineAfter(element: HTMLElement): boolean;
|
|
8
9
|
export declare function getElementDisplaytype(element: HTMLElement): ElementDisplayType;
|
|
9
10
|
export declare function isEmptyTextNode(node: Node): boolean;
|
|
10
11
|
export declare function getActiveElement(): Element;
|
|
@@ -13,6 +13,9 @@ export var ElementDisplayType;
|
|
|
13
13
|
export function isInline(element) {
|
|
14
14
|
return element != null && window.getComputedStyle(element).display.startsWith('inline');
|
|
15
15
|
}
|
|
16
|
+
export function isInlineAfter(element) {
|
|
17
|
+
return element != null && window.getComputedStyle(element).display == 'inline';
|
|
18
|
+
}
|
|
16
19
|
export function getElementDisplaytype(element) {
|
|
17
20
|
const display = window.getComputedStyle(element).display;
|
|
18
21
|
return display == 'none' ? ElementDisplayType.none : display.startsWith('inline') ? ElementDisplayType.inline : ElementDisplayType.block;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BaseServiceContainer } from './BaseServiceContainer';
|
|
2
|
-
import { CodeViewMonaco } from "../widgets/codeView/code-view-monaco";
|
|
3
2
|
import { DemoView } from '../widgets/demoView/demoView';
|
|
4
3
|
import { GlobalContext } from './GlobalContext';
|
|
4
|
+
import { CodeViewSimple } from "../widgets/codeView/code-view-simple";
|
|
5
5
|
export class ServiceContainer extends BaseServiceContainer {
|
|
6
6
|
config = {
|
|
7
|
-
codeViewWidget:
|
|
7
|
+
codeViewWidget: CodeViewSimple,
|
|
8
8
|
demoViewWidget: DemoView
|
|
9
9
|
};
|
|
10
10
|
designerExtensions = new Map();
|
|
@@ -5,6 +5,7 @@ import { IStringPosition } from './IStringPosition.js';
|
|
|
5
5
|
import { AbstractHtmlWriterService } from './AbstractHtmlWriterService.js';
|
|
6
6
|
export declare class HtmlWriterService extends AbstractHtmlWriterService {
|
|
7
7
|
private _conditionalyWriteIndent;
|
|
8
|
+
private _conditionalyWriteIndentBefore;
|
|
8
9
|
private _conditionalyWriteNewline;
|
|
9
10
|
write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
|
|
10
11
|
private internalWrite;
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import { DomConverter } from '../../widgets/designerView/DomConverter.js';
|
|
2
2
|
import { NodeType } from '../../item/NodeType.js';
|
|
3
|
-
import { isEmptyTextNode, isInline } from '../../helper/ElementHelper.js';
|
|
3
|
+
import { isEmptyTextNode, isInline, isInlineAfter } from '../../helper/ElementHelper.js';
|
|
4
4
|
import { AbstractHtmlWriterService } from './AbstractHtmlWriterService.js';
|
|
5
5
|
export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
6
6
|
_conditionalyWriteIndent(indentedTextWriter, designItem) {
|
|
7
|
-
if ((designItem.element instanceof HTMLElement && !
|
|
7
|
+
if ((designItem.element instanceof HTMLElement && !isInlineAfter(designItem.element)) ||
|
|
8
8
|
(designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling)) ||
|
|
9
9
|
(designItem.element.previousElementSibling == null && !isInline(designItem.element.parentElement) && (designItem.element.previousSibling == null || isEmptyTextNode(designItem.element.previousSibling))) ||
|
|
10
10
|
(designItem.element instanceof SVGElement))
|
|
11
11
|
indentedTextWriter.writeIndent();
|
|
12
12
|
}
|
|
13
|
+
_conditionalyWriteIndentBefore(indentedTextWriter, designItem) {
|
|
14
|
+
if ((designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling)) ||
|
|
15
|
+
(designItem.element.previousElementSibling == null && !isInline(designItem.element.parentElement) && (designItem.element.previousSibling == null || isEmptyTextNode(designItem.element.previousSibling))) ||
|
|
16
|
+
(designItem.element instanceof SVGElement))
|
|
17
|
+
indentedTextWriter.writeIndent();
|
|
18
|
+
}
|
|
13
19
|
_conditionalyWriteNewline(indentedTextWriter, designItem) {
|
|
14
|
-
if ((designItem.element instanceof HTMLElement && !
|
|
20
|
+
if ((designItem.element instanceof HTMLElement && !isInlineAfter(designItem.element)) ||
|
|
15
21
|
(designItem.element.nextElementSibling instanceof HTMLElement && !isInline(designItem.element.nextElementSibling)) ||
|
|
16
22
|
(designItem.element instanceof SVGElement))
|
|
17
23
|
indentedTextWriter.writeNewline();
|
|
@@ -25,7 +31,7 @@ export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
|
25
31
|
let start = indentedTextWriter.position;
|
|
26
32
|
if (designItem.nodeType == NodeType.TextNode) {
|
|
27
33
|
if (isEmptyTextNode(designItem.element) &&
|
|
28
|
-
((designItem.element.previousSibling instanceof HTMLElement && !
|
|
34
|
+
((designItem.element.previousSibling instanceof HTMLElement && !isInlineAfter(designItem.element.previousSibling)) ||
|
|
29
35
|
(designItem.element.nextSibling instanceof HTMLElement && !isInline(designItem.element.nextSibling)))) {
|
|
30
36
|
}
|
|
31
37
|
else
|
|
@@ -37,7 +43,7 @@ export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
|
37
43
|
this._conditionalyWriteNewline(indentedTextWriter, designItem);
|
|
38
44
|
}
|
|
39
45
|
else {
|
|
40
|
-
this.
|
|
46
|
+
this._conditionalyWriteIndentBefore(indentedTextWriter, designItem);
|
|
41
47
|
indentedTextWriter.write('<' + designItem.name);
|
|
42
48
|
this.writeAttributes(indentedTextWriter, designItem, options);
|
|
43
49
|
this.writeStyles(indentedTextWriter, designItem, options);
|
|
@@ -50,7 +56,7 @@ export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
|
50
56
|
this.writeTextNode(indentedTextWriter, designItem, false);
|
|
51
57
|
}
|
|
52
58
|
else {
|
|
53
|
-
if (designItem.element instanceof HTMLElement && !
|
|
59
|
+
if (designItem.element instanceof HTMLElement && !isInlineAfter(designItem.element) || (designItem.element instanceof SVGElement)) {
|
|
54
60
|
indentedTextWriter.writeNewline();
|
|
55
61
|
indentedTextWriter.levelRaise();
|
|
56
62
|
}
|
|
@@ -61,7 +67,7 @@ export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
|
61
67
|
if (!indentedTextWriter.isLastCharNewline())
|
|
62
68
|
this._conditionalyWriteNewline(indentedTextWriter, c);
|
|
63
69
|
}
|
|
64
|
-
if (designItem.element instanceof HTMLElement && !
|
|
70
|
+
if (designItem.element instanceof HTMLElement && !isInlineAfter(designItem.element) || (designItem.element instanceof SVGElement)) {
|
|
65
71
|
indentedTextWriter.levelShrink();
|
|
66
72
|
if (!indentedTextWriter.isLastCharNewline())
|
|
67
73
|
indentedTextWriter.writeNewline();
|
|
@@ -76,7 +82,7 @@ export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
|
76
82
|
if (!DomConverter.IsSelfClosingElement(designItem.name))
|
|
77
83
|
indentedTextWriter.write('</' + designItem.name + '>');
|
|
78
84
|
//if (!contentSingleTextNode)
|
|
79
|
-
if (!indentedTextWriter.isLastCharNewline())
|
|
85
|
+
if (!indentedTextWriter.isLastCharNewline() && (!designItem.parent || !isInlineAfter(designItem.parent.element)))
|
|
80
86
|
this._conditionalyWriteNewline(indentedTextWriter, designItem);
|
|
81
87
|
}
|
|
82
88
|
if (designItemsAssignmentList) {
|
|
@@ -4,8 +4,9 @@ import { IElementsService } from "../elementsService/IElementsService";
|
|
|
4
4
|
import { IPropertiesService } from "../propertiesService/IPropertiesService";
|
|
5
5
|
import { IProperty } from "../propertiesService/IProperty";
|
|
6
6
|
import { IDesignItem } from "../../item/IDesignItem";
|
|
7
|
-
import {
|
|
8
|
-
export declare class WebcomponentManifestParserService extends
|
|
7
|
+
import { AbstractPropertiesService } from "../propertiesService/services/AbstractPropertiesService";
|
|
8
|
+
export declare class WebcomponentManifestParserService extends AbstractPropertiesService implements IElementsService, IPropertiesService {
|
|
9
|
+
listNeedsRefresh(designItem: IDesignItem): boolean;
|
|
9
10
|
private _name;
|
|
10
11
|
get name(): string;
|
|
11
12
|
private _packageData;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { BindingTarget } from "../../item/BindingTarget";
|
|
2
2
|
import { PropertyType } from "../propertiesService/PropertyType";
|
|
3
|
-
import {
|
|
4
|
-
export class WebcomponentManifestParserService extends
|
|
3
|
+
import { AbstractPropertiesService } from "../propertiesService/services/AbstractPropertiesService";
|
|
4
|
+
export class WebcomponentManifestParserService extends AbstractPropertiesService {
|
|
5
|
+
listNeedsRefresh(designItem) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
5
8
|
_name;
|
|
6
9
|
get name() { return this._name; }
|
|
7
10
|
_packageData;
|
|
@@ -36,22 +36,22 @@ export class DefaultModelCommandService {
|
|
|
36
36
|
else if (command.type == CommandType.moveToFront)
|
|
37
37
|
sel.parent.insertChild(sel);
|
|
38
38
|
else if (command.type == CommandType.arrangeTop) {
|
|
39
|
-
ArrangeHelper.arrangeElements(Orientation.TOP, designerCanvas);
|
|
39
|
+
ArrangeHelper.arrangeElements(Orientation.TOP, designerCanvas, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
40
40
|
}
|
|
41
41
|
else if (command.type == CommandType.arrangeRight) {
|
|
42
|
-
ArrangeHelper.arrangeElements(Orientation.RIGHT, designerCanvas);
|
|
42
|
+
ArrangeHelper.arrangeElements(Orientation.RIGHT, designerCanvas, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
43
43
|
}
|
|
44
44
|
else if (command.type == CommandType.arrangeLeft) {
|
|
45
|
-
ArrangeHelper.arrangeElements(Orientation.LEFT, designerCanvas);
|
|
45
|
+
ArrangeHelper.arrangeElements(Orientation.LEFT, designerCanvas, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
46
46
|
}
|
|
47
47
|
else if (command.type == CommandType.arrangeBottom) {
|
|
48
|
-
ArrangeHelper.arrangeElements(Orientation.BOTTOM, designerCanvas);
|
|
48
|
+
ArrangeHelper.arrangeElements(Orientation.BOTTOM, designerCanvas, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
49
49
|
}
|
|
50
50
|
else if (command.type == CommandType.arrangeCenter) {
|
|
51
|
-
ArrangeHelper.arrangeElements(Orientation.HORIZONTAL_CENTER, designerCanvas);
|
|
51
|
+
ArrangeHelper.arrangeElements(Orientation.HORIZONTAL_CENTER, designerCanvas, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
52
52
|
}
|
|
53
53
|
else if (command.type == CommandType.arrangeMiddle) {
|
|
54
|
-
ArrangeHelper.arrangeElements(Orientation.VERTICAL_CENTER, designerCanvas);
|
|
54
|
+
ArrangeHelper.arrangeElements(Orientation.VERTICAL_CENTER, designerCanvas, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
55
55
|
}
|
|
56
56
|
else if (command.type == CommandType.unifyHeight) {
|
|
57
57
|
const grp = designerCanvas.instanceServiceContainer.selectionService.primarySelection.openGroup('unifyHeight');
|
package/dist/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IProperty } from '../IProperty';
|
|
2
|
+
import { IDesignItem } from '../../../item/IDesignItem';
|
|
3
|
+
import { AbstractPropertiesService } from "./AbstractPropertiesService";
|
|
4
|
+
export declare abstract class AbstractPolymerLikePropertiesService extends AbstractPropertiesService {
|
|
5
|
+
listNeedsRefresh(designItem: IDesignItem): boolean;
|
|
6
|
+
getProperties(designItem: IDesignItem): IProperty[];
|
|
7
|
+
protected parseProperties(list: any): IProperty[];
|
|
8
|
+
}
|
package/dist/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { PropertiesHelper } from './PropertiesHelper';
|
|
2
|
+
import { AbstractPropertiesService } from "./AbstractPropertiesService";
|
|
3
|
+
import { PropertyType } from '../PropertyType';
|
|
4
|
+
export class AbstractPolymerLikePropertiesService extends AbstractPropertiesService {
|
|
5
|
+
listNeedsRefresh(designItem) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
getProperties(designItem) {
|
|
9
|
+
if (!this.isHandledElement(designItem))
|
|
10
|
+
return null;
|
|
11
|
+
return this.parseProperties(designItem.element.constructor.properties);
|
|
12
|
+
}
|
|
13
|
+
parseProperties(list) {
|
|
14
|
+
let properties = [];
|
|
15
|
+
for (const name in list) {
|
|
16
|
+
const polymerProperty = list[name];
|
|
17
|
+
let type = polymerProperty;
|
|
18
|
+
if (polymerProperty.type)
|
|
19
|
+
type = polymerProperty.type;
|
|
20
|
+
if (type === String) {
|
|
21
|
+
let property = { name: name, type: "string", service: this, propertyType: PropertyType.propertyAndAttribute };
|
|
22
|
+
properties.push(property);
|
|
23
|
+
}
|
|
24
|
+
else if (type === Object) {
|
|
25
|
+
let property = { name: name, type: "object", service: this, propertyType: PropertyType.propertyAndAttribute };
|
|
26
|
+
properties.push(property);
|
|
27
|
+
}
|
|
28
|
+
else if (type === Number) {
|
|
29
|
+
let property = { name: name, type: "number", service: this, propertyType: PropertyType.propertyAndAttribute };
|
|
30
|
+
properties.push(property);
|
|
31
|
+
}
|
|
32
|
+
else if (type === Date) {
|
|
33
|
+
let property = { name: name, type: "date", service: this, propertyType: PropertyType.propertyAndAttribute };
|
|
34
|
+
properties.push(property);
|
|
35
|
+
}
|
|
36
|
+
else if (type === Boolean) {
|
|
37
|
+
let property = { name: name, type: "boolean", service: this, propertyType: PropertyType.propertyAndAttribute };
|
|
38
|
+
properties.push(property);
|
|
39
|
+
}
|
|
40
|
+
else if (PropertiesHelper.isTypescriptEnum(type)) {
|
|
41
|
+
let property = { name: name, type: "enum", enumValues: PropertiesHelper.getTypescriptEnumEntries(type), service: this, propertyType: PropertyType.propertyAndAttribute };
|
|
42
|
+
properties.push(property);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return properties;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { IPropertiesService } from "../IPropertiesService";
|
|
2
|
+
import { IProperty } from '../IProperty';
|
|
3
|
+
import { IDesignItem } from '../../../item/IDesignItem';
|
|
4
|
+
import { ValueType } from "../ValueType";
|
|
5
|
+
import { BindingTarget } from "../../../item/BindingTarget";
|
|
6
|
+
import { IBinding } from "../../../item/IBinding";
|
|
7
|
+
export declare abstract class AbstractPropertiesService implements IPropertiesService {
|
|
8
|
+
abstract listNeedsRefresh(designItem: IDesignItem): boolean;
|
|
9
|
+
abstract isHandledElement(designItem: IDesignItem): boolean;
|
|
10
|
+
protected _notifyChangedProperty(designItem: IDesignItem, property: IProperty, value: any): void;
|
|
11
|
+
getProperty(designItem: IDesignItem, name: string): IProperty;
|
|
12
|
+
abstract getProperties(designItem: IDesignItem): IProperty[];
|
|
13
|
+
setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
|
|
14
|
+
getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
|
|
15
|
+
clearValue(designItems: IDesignItem[], property: IProperty): void;
|
|
16
|
+
isSet(designItems: IDesignItem[], property: IProperty): ValueType;
|
|
17
|
+
getValue(designItems: IDesignItem[], property: IProperty): string | boolean;
|
|
18
|
+
getBinding(designItems: IDesignItem[], property: IProperty): IBinding;
|
|
19
|
+
getUnsetValue(designItems: IDesignItem[], property: IProperty): any;
|
|
20
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { ValueType } from "../ValueType";
|
|
2
|
+
import { PropertiesHelper } from './PropertiesHelper';
|
|
3
|
+
import { BindingTarget } from "../../../item/BindingTarget";
|
|
4
|
+
import { PropertyType } from "../PropertyType";
|
|
5
|
+
import { NodeType } from "../../../item/NodeType";
|
|
6
|
+
export class AbstractPropertiesService {
|
|
7
|
+
_notifyChangedProperty(designItem, property, value) {
|
|
8
|
+
}
|
|
9
|
+
getProperty(designItem, name) {
|
|
10
|
+
return this.getProperties(designItem).find(x => x.name == name);
|
|
11
|
+
}
|
|
12
|
+
setValue(designItems, property, value) {
|
|
13
|
+
const cg = designItems[0].openGroup("properties changed");
|
|
14
|
+
for (let d of designItems) {
|
|
15
|
+
if (property.propertyType == PropertyType.cssValue) {
|
|
16
|
+
d.styles.set(property.name, value);
|
|
17
|
+
d.element.style[property.name] = value;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
let attributeName = property.attributeName;
|
|
21
|
+
if (!attributeName)
|
|
22
|
+
attributeName = PropertiesHelper.camelToDashCase(property.name);
|
|
23
|
+
if (property.type === 'object') {
|
|
24
|
+
const json = JSON.stringify(value);
|
|
25
|
+
d.attributes.set(attributeName, json);
|
|
26
|
+
d.element.setAttribute(attributeName, json);
|
|
27
|
+
}
|
|
28
|
+
else if (property.type == 'boolean' && !value) {
|
|
29
|
+
d.attributes.delete(attributeName);
|
|
30
|
+
d.element.removeAttribute(attributeName);
|
|
31
|
+
}
|
|
32
|
+
else if (property.type == 'boolean' && value) {
|
|
33
|
+
d.attributes.set(attributeName, "");
|
|
34
|
+
d.element.setAttribute(attributeName, "");
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
d.attributes.set(attributeName, value);
|
|
38
|
+
d.element.setAttribute(attributeName, value);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
this._notifyChangedProperty(d, property, value);
|
|
42
|
+
}
|
|
43
|
+
cg.commit();
|
|
44
|
+
}
|
|
45
|
+
getPropertyTarget(designItem, property) {
|
|
46
|
+
return BindingTarget.property;
|
|
47
|
+
}
|
|
48
|
+
clearValue(designItems, property) {
|
|
49
|
+
const cg = designItems[0].openGroup("properties cleared");
|
|
50
|
+
for (let d of designItems) {
|
|
51
|
+
if (property.propertyType == PropertyType.cssValue) {
|
|
52
|
+
d.styles.delete(property.name);
|
|
53
|
+
d.element.style[property.name] = '';
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
let attributeName = property.attributeName;
|
|
57
|
+
if (!attributeName)
|
|
58
|
+
attributeName = PropertiesHelper.camelToDashCase(property.name);
|
|
59
|
+
d.attributes.delete(attributeName);
|
|
60
|
+
d.element.removeAttribute(attributeName);
|
|
61
|
+
}
|
|
62
|
+
d.serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
|
|
63
|
+
return s.clearBinding(d, property.name, this.getPropertyTarget(d, property));
|
|
64
|
+
});
|
|
65
|
+
this._notifyChangedProperty(d, property, undefined);
|
|
66
|
+
}
|
|
67
|
+
cg.commit();
|
|
68
|
+
}
|
|
69
|
+
isSet(designItems, property) {
|
|
70
|
+
let all = true;
|
|
71
|
+
let some = false;
|
|
72
|
+
if (designItems != null && designItems.length !== 0) {
|
|
73
|
+
let attributeName = property.attributeName;
|
|
74
|
+
if (!attributeName)
|
|
75
|
+
attributeName = PropertiesHelper.camelToDashCase(property.name);
|
|
76
|
+
designItems.forEach((x) => {
|
|
77
|
+
let has = false;
|
|
78
|
+
if (property.propertyType == PropertyType.cssValue)
|
|
79
|
+
has = x.styles.has(property.name);
|
|
80
|
+
else
|
|
81
|
+
has = x.attributes.has(attributeName);
|
|
82
|
+
all = all && has;
|
|
83
|
+
some = some || has;
|
|
84
|
+
});
|
|
85
|
+
//todo: optimize perf, do not call bindings service for each property.
|
|
86
|
+
const bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
|
|
87
|
+
return s.getBindings(designItems[0]);
|
|
88
|
+
});
|
|
89
|
+
if (property.propertyType == PropertyType.cssValue) {
|
|
90
|
+
if (bindings && bindings.find(x => x.target == BindingTarget.css && x.targetName == property.name))
|
|
91
|
+
return ValueType.bound;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
if (bindings && bindings.find(x => x.target == BindingTarget.property && x.targetName == property.name))
|
|
95
|
+
return ValueType.bound;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else
|
|
99
|
+
return ValueType.none;
|
|
100
|
+
return all ? ValueType.all : some ? ValueType.some : ValueType.none;
|
|
101
|
+
}
|
|
102
|
+
getValue(designItems, property) {
|
|
103
|
+
if (designItems != null && designItems.length !== 0) {
|
|
104
|
+
if (property.propertyType == PropertyType.cssValue) {
|
|
105
|
+
let lastValue = designItems[0].styles.get(property.name);
|
|
106
|
+
for (const x of designItems) {
|
|
107
|
+
let value = x.styles.get(property.name);
|
|
108
|
+
if (value != lastValue) {
|
|
109
|
+
lastValue = null;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return lastValue;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
let attributeName = property.attributeName;
|
|
117
|
+
if (!attributeName)
|
|
118
|
+
attributeName = PropertiesHelper.camelToDashCase(property.name);
|
|
119
|
+
if (property.type == 'boolean')
|
|
120
|
+
return designItems[0].attributes.has(attributeName);
|
|
121
|
+
let lastValue = designItems[0].attributes.get(attributeName);
|
|
122
|
+
/*
|
|
123
|
+
for (const x of designItems) {
|
|
124
|
+
let value = x.attributes.get(attributeName);
|
|
125
|
+
if (value != lastValue) {
|
|
126
|
+
lastValue = null;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
*/
|
|
131
|
+
return lastValue;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
getBinding(designItems, property) {
|
|
137
|
+
//TODO: optimize perf, do not call bindings service for each property.
|
|
138
|
+
const bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
|
|
139
|
+
return s.getBindings(designItems[0]);
|
|
140
|
+
});
|
|
141
|
+
if (property.propertyType == PropertyType.cssValue) {
|
|
142
|
+
return bindings.find(x => (x.target == BindingTarget.css) && x.targetName == property.name);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return bindings.find(x => (x.target == BindingTarget.property || x.target == BindingTarget.attribute) && x.targetName == property.name);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//todo: optimize perf, call window.getComputedStyle only once per item, and not per property
|
|
149
|
+
getUnsetValue(designItems, property) {
|
|
150
|
+
if (property.propertyType == PropertyType.cssValue) {
|
|
151
|
+
if (designItems != null && designItems.length !== 0) {
|
|
152
|
+
if (designItems[0].nodeType == NodeType.Element) {
|
|
153
|
+
let v = window.getComputedStyle(designItems[0].element)[property.name];
|
|
154
|
+
return v;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
else
|
|
160
|
+
return property.defaultValue;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IProperty } from '../IProperty';
|
|
2
2
|
import { IDesignItem } from '../../../item/IDesignItem';
|
|
3
|
-
import {
|
|
4
|
-
export declare class BaseCustomWebComponentPropertiesService extends
|
|
3
|
+
import { AbstractPolymerLikePropertiesService } from './AbstractPolymerLikePropertiesService';
|
|
4
|
+
export declare class BaseCustomWebComponentPropertiesService extends AbstractPolymerLikePropertiesService {
|
|
5
5
|
name: string;
|
|
6
6
|
isHandledElement(designItem: IDesignItem): boolean;
|
|
7
7
|
protected _notifyChangedProperty(designItem: IDesignItem, property: IProperty, value: any): void;
|
package/dist/elements/services/propertiesService/services/BaseCustomWebComponentPropertiesService.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseCustomWebComponentLazyAppend, BaseCustomWebComponentConstructorAppend, BaseCustomWebComponentConstructorAppendLazyReady } from '@node-projects/base-custom-webcomponent';
|
|
2
|
-
import {
|
|
3
|
-
export class BaseCustomWebComponentPropertiesService extends
|
|
2
|
+
import { AbstractPolymerLikePropertiesService } from './AbstractPolymerLikePropertiesService';
|
|
3
|
+
export class BaseCustomWebComponentPropertiesService extends AbstractPolymerLikePropertiesService {
|
|
4
4
|
name = "baseCustomWebComponent";
|
|
5
5
|
isHandledElement(designItem) {
|
|
6
6
|
return designItem.element instanceof BaseCustomWebComponentLazyAppend ||
|
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
import { IPropertiesService } from "../IPropertiesService";
|
|
2
1
|
import { IProperty } from '../IProperty';
|
|
3
2
|
import { IDesignItem } from '../../../item/IDesignItem';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import { IBinding } from "../../../item/IBinding";
|
|
7
|
-
export declare class CommonPropertiesService implements IPropertiesService {
|
|
3
|
+
import { AbstractPropertiesService } from "./AbstractPropertiesService";
|
|
4
|
+
export declare class CommonPropertiesService extends AbstractPropertiesService {
|
|
8
5
|
listNeedsRefresh(designItem: IDesignItem): boolean;
|
|
9
6
|
private commonProperties;
|
|
10
7
|
name: string;
|
|
11
8
|
isHandledElement(designItem: IDesignItem): boolean;
|
|
12
9
|
getProperty(designItem: IDesignItem, name: string): IProperty;
|
|
13
10
|
getProperties(designItem: IDesignItem): IProperty[];
|
|
14
|
-
setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
|
|
15
|
-
getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
|
|
16
|
-
clearValue(designItems: IDesignItem[], property: IProperty): void;
|
|
17
|
-
isSet(designItems: IDesignItem[], property: IProperty): ValueType;
|
|
18
|
-
getValue(designItems: IDesignItem[], property: IProperty): string | boolean;
|
|
19
|
-
getBinding(designItems: IDesignItem[], property: IProperty): IBinding;
|
|
20
|
-
getUnsetValue(designItems: IDesignItem[], property: IProperty): any;
|
|
21
11
|
}
|