@node-projects/web-component-designer 0.0.75 → 0.0.79
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 +2 -2
- package/dist/elements/documentContainer.d.ts +3 -0
- package/dist/elements/documentContainer.js +13 -3
- package/dist/elements/helper/ElementHelper.d.ts +7 -0
- package/dist/elements/helper/ElementHelper.js +13 -0
- package/dist/elements/helper/IndentedTextWriter.d.ts +1 -0
- package/dist/elements/helper/IndentedTextWriter.js +3 -0
- package/dist/elements/services/BaseServiceContainer.d.ts +1 -0
- package/dist/elements/services/BaseServiceContainer.js +7 -0
- package/dist/elements/services/DefaultServiceBootstrap.js +1 -1
- package/dist/elements/services/ServiceContainer.d.ts +1 -1
- package/dist/elements/services/ServiceContainer.js +2 -2
- package/dist/elements/services/demoProviderService/DemoProviderService.d.ts +1 -1
- package/dist/elements/services/demoProviderService/DemoProviderService.js +3 -2
- package/dist/elements/services/demoProviderService/IDemoProviderService.d.ts +1 -1
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService copy.d.ts +22 -0
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService copy.js +125 -0
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.d.ts +22 -0
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +133 -0
- package/dist/elements/services/htmlWriterService/HtmlWriterService copy.d.ts +22 -0
- package/dist/elements/services/htmlWriterService/HtmlWriterService copy.js +118 -0
- package/dist/elements/services/htmlWriterService/HtmlWriterService.d.ts +2 -2
- package/dist/elements/services/htmlWriterService/HtmlWriterService.js +34 -19
- package/dist/elements/services/htmlWriterService/IHtmlWriterService.d.ts +5 -6
- package/dist/elements/services/htmlWriterService/LitElementWriterService.d.ts +14 -0
- package/dist/elements/services/htmlWriterService/LitElementWriterService.js +123 -0
- package/dist/elements/services/htmlWriterService/LitTsElementWriterService.d.ts +9 -0
- package/dist/elements/services/htmlWriterService/LitTsElementWriterService.js +43 -0
- package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService copy.d.ts +22 -0
- package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService copy.js +125 -0
- package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService.d.ts +27 -0
- package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService.js +93 -0
- package/dist/elements/services/initializationService/DefaultIntializationService.d.ts +6 -0
- package/dist/elements/services/initializationService/DefaultIntializationService.js +22 -0
- package/dist/elements/services/initializationService/IIntializationService copy.d.ts +4 -0
- package/dist/elements/services/initializationService/IIntializationService copy.js +1 -0
- package/dist/elements/services/instanceService/DefaultInstanceService.js +1 -1
- package/dist/elements/services/manifestLoaders/WebcomponentManifestParserService.d.ts +26 -0
- package/dist/elements/services/manifestLoaders/WebcomponentManifestParserService.js +69 -0
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.d.ts +25 -0
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +92 -0
- package/dist/elements/services/propertiesService/DefaultEditorTypesService.js +0 -1
- package/dist/elements/services/propertiesService/IPropertiesService.d.ts +0 -1
- package/dist/elements/services/propertiesService/IProperty.d.ts +5 -1
- package/dist/elements/services/propertiesService/PropertyType.d.ts +6 -0
- package/dist/elements/services/propertiesService/PropertyType.js +7 -0
- package/dist/elements/services/propertiesService/services/AbstractBasePropertiesService.js +7 -6
- package/dist/elements/services/propertiesService/services/AttributesPropertiesService.js +3 -2
- package/dist/elements/services/propertiesService/services/CommonPropertiesService.js +11 -4
- package/dist/elements/services/propertiesService/services/CssPropertiesService.js +81 -41
- package/dist/elements/services/propertiesService/services/IJsonPropertyDefinition.d.ts +4 -0
- package/dist/elements/services/propertiesService/services/ListPropertiesService.js +5 -1
- package/dist/elements/services/propertiesService/services/Lit2PropertiesService.js +7 -6
- package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.js +25 -12
- package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.d.ts +1 -2
- package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.js +1 -1
- package/dist/elements/services/webcomponentManifestParserService/WebcomponentManifestParserService.1.d.ts +0 -0
- package/dist/elements/services/webcomponentManifestParserService/WebcomponentManifestParserService.1.js +1 -0
- package/dist/elements/services/webcomponentManifestParserService/webcomponentManifestParserService.d.ts +26 -0
- package/dist/elements/services/webcomponentManifestParserService/webcomponentManifestParserService.js +69 -0
- package/dist/elements/widgets/demoView/IDemoView.d.ts +1 -1
- package/dist/elements/widgets/demoView/demoView.d.ts +1 -1
- package/dist/elements/widgets/demoView/demoView.js +2 -2
- package/dist/elements/widgets/designerView/DomConverter.js +1 -7
- package/dist/elements/widgets/designerView/designerCanvas.js +6 -0
- package/dist/elements/widgets/designerView/overlayLayerView.js +1 -2
- package/dist/elements/widgets/paletteView/paletteTreeView.js +13 -8
- package/dist/elements/widgets/paletteView/paletteView.js +10 -5
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/package.json +5 -4
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { DomConverter } from '../../widgets/designerView/DomConverter';
|
|
2
|
+
import { CssCombiner } from '../../helper/CssCombiner';
|
|
3
|
+
import { NodeType } from '../../item/NodeType';
|
|
4
|
+
import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper';
|
|
5
|
+
import { ElementDisplayType, getElementDisplaytype } from '../../helper/ElementHelper.js';
|
|
6
|
+
var ElementContainerType;
|
|
7
|
+
(function (ElementContainerType) {
|
|
8
|
+
ElementContainerType[ElementContainerType["block"] = 0] = "block";
|
|
9
|
+
ElementContainerType[ElementContainerType["complex"] = 1] = "complex";
|
|
10
|
+
})(ElementContainerType || (ElementContainerType = {}));
|
|
11
|
+
export class HtmlWriterService {
|
|
12
|
+
writeAttributes(writeContext, designItem) {
|
|
13
|
+
if (designItem.hasAttributes) {
|
|
14
|
+
for (const a of designItem.attributes) {
|
|
15
|
+
writeContext.indentedTextWriter.write(' ');
|
|
16
|
+
if (typeof a[1] === 'string') {
|
|
17
|
+
if (a[1] === "")
|
|
18
|
+
writeContext.indentedTextWriter.write(a[0]);
|
|
19
|
+
else
|
|
20
|
+
writeContext.indentedTextWriter.write(a[0] + '="' + DomConverter.normalizeAttributeValue(a[1]) + '"');
|
|
21
|
+
}
|
|
22
|
+
else if (!a[1])
|
|
23
|
+
writeContext.indentedTextWriter.write(a[0]);
|
|
24
|
+
else {
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
writeStyles(writeContext, designItem) {
|
|
30
|
+
if (designItem.hasStyles) {
|
|
31
|
+
writeContext.indentedTextWriter.write(' style="');
|
|
32
|
+
let styles = designItem.styles;
|
|
33
|
+
if (writeContext.options.compressCssToShorthandProperties)
|
|
34
|
+
styles = CssCombiner.combine(styles);
|
|
35
|
+
for (const s of styles) {
|
|
36
|
+
if (s[0]) {
|
|
37
|
+
writeContext.indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
writeContext.indentedTextWriter.write('"');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
_writeTextNode(writeContext, designItem) {
|
|
44
|
+
writeContext.lastElementDisplayType = ElementDisplayType.inline;
|
|
45
|
+
let content = DomConverter.normalizeContentValue(designItem.content).trim();
|
|
46
|
+
if (content) {
|
|
47
|
+
writeContext.indentedTextWriter.write(content);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
_writeCommentNode(writeContext, designItem) {
|
|
51
|
+
writeContext.indentedTextWriter.write('<!--' + designItem.content + '-->');
|
|
52
|
+
}
|
|
53
|
+
_writeElementNode(writeContext, designItem) {
|
|
54
|
+
const currentElementDisplayType = getElementDisplaytype(designItem.element);
|
|
55
|
+
writeContext.lastElementDisplayType = currentElementDisplayType;
|
|
56
|
+
writeContext.indentedTextWriter.write('<' + designItem.name);
|
|
57
|
+
this.writeAttributes(writeContext, designItem);
|
|
58
|
+
this.writeStyles(writeContext, designItem);
|
|
59
|
+
writeContext.indentedTextWriter.write('>');
|
|
60
|
+
if (designItem.hasChildren) {
|
|
61
|
+
const children = designItem.children();
|
|
62
|
+
const contentSingleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
|
|
63
|
+
if (contentSingleTextNode) {
|
|
64
|
+
this._writeInternal(writeContext, designItem.firstChild);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
let previousContainerDisplayType = writeContext.containerDisplayType;
|
|
68
|
+
writeContext.containerDisplayType = this.getContainerType(designItem.element);
|
|
69
|
+
writeContext.indentedTextWriter.levelRaise();
|
|
70
|
+
this._writeDesignItemList(currentElementDisplayType, writeContext, children);
|
|
71
|
+
writeContext.indentedTextWriter.levelShrink();
|
|
72
|
+
writeContext.containerDisplayType = previousContainerDisplayType;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else if (designItem.hasContent) {
|
|
76
|
+
writeContext.indentedTextWriter.write(DomConverter.normalizeContentValue(designItem.content));
|
|
77
|
+
}
|
|
78
|
+
if (!DomConverter.IsSelfClosingElement(designItem.name))
|
|
79
|
+
writeContext.indentedTextWriter.write('</' + designItem.name + '>');
|
|
80
|
+
//if (writeContext.writerState === WriterState.block)
|
|
81
|
+
//this._writeNewlineAndIntend(writeContext);
|
|
82
|
+
}
|
|
83
|
+
_writeDesignItemList(currentElementDisplayType, writeContext, children) {
|
|
84
|
+
for (const c of children) {
|
|
85
|
+
if (writeContext.containerDisplayType === ElementContainerType.complex)
|
|
86
|
+
this._writeNewlineAndIntend(writeContext);
|
|
87
|
+
else if (writeContext.lastElementDisplayType !== ElementDisplayType.inline || currentElementDisplayType !== ElementDisplayType.inline)
|
|
88
|
+
this._writeNewlineAndIntend(writeContext);
|
|
89
|
+
this._writeInternal(writeContext, c);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
_writeNewlineAndIntend(writeContext) {
|
|
93
|
+
writeContext.indentedTextWriter.writeNewline();
|
|
94
|
+
writeContext.indentedTextWriter.writeIndent();
|
|
95
|
+
}
|
|
96
|
+
_writeInternal(writeContext, designItem) {
|
|
97
|
+
const start = writeContext.indentedTextWriter.position;
|
|
98
|
+
if (designItem.nodeType === NodeType.TextNode)
|
|
99
|
+
this._writeTextNode(writeContext, designItem);
|
|
100
|
+
else if (designItem.nodeType === NodeType.Comment)
|
|
101
|
+
this._writeCommentNode(writeContext, designItem);
|
|
102
|
+
else if (designItem.nodeType === NodeType.Element)
|
|
103
|
+
this._writeElementNode(writeContext, designItem);
|
|
104
|
+
if (writeContext.designItemsAssignmentList) {
|
|
105
|
+
writeContext.designItemsAssignmentList.set(designItem, { start: start, length: writeContext.indentedTextWriter.position - start - 1 });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
getContainerType(element) {
|
|
109
|
+
const display = window.getComputedStyle(element).display;
|
|
110
|
+
if (display === 'block' || display === "inline-block" || display == '')
|
|
111
|
+
return ElementContainerType.block;
|
|
112
|
+
return ElementContainerType.complex;
|
|
113
|
+
}
|
|
114
|
+
write(indentedTextWriter, designItems, rootContainerKeepInline, options, designItemsAssignmentList) {
|
|
115
|
+
const context = { indentedTextWriter, options, lastElementDisplayType: ElementDisplayType.none, containerDisplayType: ElementContainerType.block, designItemsAssignmentList };
|
|
116
|
+
this._writeDesignItemList(ElementDisplayType.inline, context, designItems);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -4,9 +4,9 @@ import { IHtmlWriterOptions } from './IHtmlWriterOptions';
|
|
|
4
4
|
import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
|
|
5
5
|
import { IStringPosition } from './IStringPosition';
|
|
6
6
|
export declare class HtmlWriterService implements IHtmlWriterService {
|
|
7
|
-
canWrite(designItem: IDesignItem): boolean;
|
|
8
7
|
private _conditionalyWriteIndent;
|
|
9
8
|
private _conditionalyWriteNewline;
|
|
10
|
-
write(indentedTextWriter: IndentedTextWriter,
|
|
9
|
+
write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
|
|
10
|
+
private internalWrite;
|
|
11
11
|
private writeTextNode;
|
|
12
12
|
}
|
|
@@ -2,14 +2,12 @@ import { DomConverter } from '../../widgets/designerView/DomConverter';
|
|
|
2
2
|
import { CssCombiner } from '../../helper/CssCombiner';
|
|
3
3
|
import { NodeType } from '../../item/NodeType';
|
|
4
4
|
import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper';
|
|
5
|
-
import { isInline } from '../../helper/ElementHelper.js';
|
|
5
|
+
import { isEmptyTextNode, isInline } from '../../helper/ElementHelper.js';
|
|
6
6
|
export class HtmlWriterService {
|
|
7
|
-
canWrite(designItem) {
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
7
|
_conditionalyWriteIndent(indentedTextWriter, designItem) {
|
|
11
8
|
if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
|
|
12
|
-
(designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling))
|
|
9
|
+
(designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling)) ||
|
|
10
|
+
(designItem.element.previousElementSibling == null && !isInline(designItem.element.parentElement) && (designItem.element.previousSibling == null || isEmptyTextNode(designItem.element.previousSibling))))
|
|
13
11
|
indentedTextWriter.writeIndent();
|
|
14
12
|
}
|
|
15
13
|
_conditionalyWriteNewline(indentedTextWriter, designItem) {
|
|
@@ -17,10 +15,20 @@ export class HtmlWriterService {
|
|
|
17
15
|
(designItem.element.nextElementSibling instanceof HTMLElement && !isInline(designItem.element.nextElementSibling)))
|
|
18
16
|
indentedTextWriter.writeNewline();
|
|
19
17
|
}
|
|
20
|
-
write(indentedTextWriter,
|
|
18
|
+
write(indentedTextWriter, designItems, rootContainerKeepInline, options, designItemsAssignmentList) {
|
|
19
|
+
for (const d of designItems) {
|
|
20
|
+
this.internalWrite(indentedTextWriter, d, options, designItemsAssignmentList);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
internalWrite(indentedTextWriter, designItem, options, designItemsAssignmentList) {
|
|
21
24
|
let start = indentedTextWriter.position;
|
|
22
25
|
if (designItem.nodeType == NodeType.TextNode) {
|
|
23
|
-
|
|
26
|
+
if (isEmptyTextNode(designItem.element) &&
|
|
27
|
+
((designItem.element.previousSibling instanceof HTMLElement && !isInline(designItem.element.previousSibling)) ||
|
|
28
|
+
(designItem.element.nextSibling instanceof HTMLElement && !isInline(designItem.element.nextSibling)))) {
|
|
29
|
+
}
|
|
30
|
+
else
|
|
31
|
+
this.writeTextNode(indentedTextWriter, designItem, true);
|
|
24
32
|
}
|
|
25
33
|
else if (designItem.nodeType == NodeType.Comment) {
|
|
26
34
|
this._conditionalyWriteIndent(indentedTextWriter, designItem);
|
|
@@ -59,24 +67,30 @@ export class HtmlWriterService {
|
|
|
59
67
|
indentedTextWriter.write('"');
|
|
60
68
|
}
|
|
61
69
|
indentedTextWriter.write('>');
|
|
70
|
+
let contentSingleTextNode = false;
|
|
62
71
|
if (designItem.hasChildren) {
|
|
63
72
|
const children = designItem.children();
|
|
64
|
-
|
|
65
|
-
if (
|
|
73
|
+
contentSingleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
|
|
74
|
+
if (contentSingleTextNode) {
|
|
66
75
|
this.writeTextNode(indentedTextWriter, designItem, false);
|
|
67
76
|
}
|
|
68
77
|
else {
|
|
69
|
-
|
|
70
|
-
|
|
78
|
+
if (designItem.element instanceof HTMLElement && !isInline(designItem.element)) {
|
|
79
|
+
indentedTextWriter.writeNewline();
|
|
80
|
+
indentedTextWriter.levelRaise();
|
|
81
|
+
}
|
|
71
82
|
for (const c of children) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
83
|
+
this.internalWrite(indentedTextWriter, c, options, designItemsAssignmentList);
|
|
84
|
+
let childSingleTextNode = c.childCount === 1 && c.firstChild.nodeType === NodeType.TextNode;
|
|
85
|
+
if (childSingleTextNode)
|
|
86
|
+
indentedTextWriter.writeNewline();
|
|
87
|
+
}
|
|
88
|
+
if (designItem.element instanceof HTMLElement && !isInline(designItem.element)) {
|
|
89
|
+
indentedTextWriter.levelShrink();
|
|
90
|
+
if (!indentedTextWriter.isLastCharNewline())
|
|
91
|
+
indentedTextWriter.writeNewline();
|
|
92
|
+
indentedTextWriter.writeIndent();
|
|
77
93
|
}
|
|
78
|
-
indentedTextWriter.levelShrink();
|
|
79
|
-
indentedTextWriter.writeIndent();
|
|
80
94
|
}
|
|
81
95
|
}
|
|
82
96
|
else if (designItem.hasContent) {
|
|
@@ -84,7 +98,8 @@ export class HtmlWriterService {
|
|
|
84
98
|
}
|
|
85
99
|
if (!DomConverter.IsSelfClosingElement(designItem.name))
|
|
86
100
|
indentedTextWriter.write('</' + designItem.name + '>');
|
|
87
|
-
|
|
101
|
+
if (!contentSingleTextNode)
|
|
102
|
+
this._conditionalyWriteNewline(indentedTextWriter, designItem);
|
|
88
103
|
}
|
|
89
104
|
if (designItemsAssignmentList) {
|
|
90
105
|
designItemsAssignmentList.set(designItem, { start: start, length: indentedTextWriter.position - start - 1 });
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { IDesignItem } from '../../item/IDesignItem';
|
|
2
|
-
import { IHtmlWriterOptions } from './IHtmlWriterOptions';
|
|
3
|
-
import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
|
|
4
|
-
import { IStringPosition } from './IStringPosition';
|
|
1
|
+
import { IDesignItem } from '../../item/IDesignItem.js';
|
|
2
|
+
import { IHtmlWriterOptions } from './IHtmlWriterOptions.js';
|
|
3
|
+
import { IndentedTextWriter } from '../../helper/IndentedTextWriter.js';
|
|
4
|
+
import { IStringPosition } from './IStringPosition.js';
|
|
5
5
|
export interface IHtmlWriterService {
|
|
6
|
-
|
|
7
|
-
write(indentedTextWriter: IndentedTextWriter, designItem: IDesignItem, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): any;
|
|
6
|
+
write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): any;
|
|
8
7
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IDesignItem } from '../../item/IDesignItem';
|
|
2
|
+
import { IHtmlWriterService } from './IHtmlWriterService';
|
|
3
|
+
import { IHtmlWriterOptions } from './IHtmlWriterOptions';
|
|
4
|
+
import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
|
|
5
|
+
import { IStringPosition } from './IStringPosition';
|
|
6
|
+
export declare class LitTsElementWriterService implements IHtmlWriterService {
|
|
7
|
+
static head: string;
|
|
8
|
+
static footer: string;
|
|
9
|
+
canWrite(designItem: IDesignItem): boolean;
|
|
10
|
+
private _conditionalyWriteIndent;
|
|
11
|
+
private _conditionalyWriteNewline;
|
|
12
|
+
write(indentedTextWriter: IndentedTextWriter, designItem: IDesignItem, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
|
|
13
|
+
private writeTextNode;
|
|
14
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { DomConverter } from '../../widgets/designerView/DomConverter';
|
|
2
|
+
import { CssCombiner } from '../../helper/CssCombiner';
|
|
3
|
+
import { NodeType } from '../../item/NodeType';
|
|
4
|
+
import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper';
|
|
5
|
+
import { isInline } from '../../helper/ElementHelper.js';
|
|
6
|
+
//todo :
|
|
7
|
+
//write style...
|
|
8
|
+
//needs InternalBindinsgStorrageService -> keeps bindings
|
|
9
|
+
export class LitTsElementWriterService {
|
|
10
|
+
static head = `import { LitElement, html } from "lit-element";
|
|
11
|
+
|
|
12
|
+
class $$className extends LitElement {
|
|
13
|
+
render() {
|
|
14
|
+
return html\``;
|
|
15
|
+
static footer = `\`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export default $$className;
|
|
20
|
+
|
|
21
|
+
declare global {
|
|
22
|
+
interface HTMLElementTagNameMap {
|
|
23
|
+
'$$elementName': $$className;
|
|
24
|
+
}
|
|
25
|
+
}`;
|
|
26
|
+
canWrite(designItem) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
_conditionalyWriteIndent(indentedTextWriter, designItem) {
|
|
30
|
+
if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
|
|
31
|
+
(designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling)))
|
|
32
|
+
indentedTextWriter.writeIndent();
|
|
33
|
+
}
|
|
34
|
+
_conditionalyWriteNewline(indentedTextWriter, designItem) {
|
|
35
|
+
if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
|
|
36
|
+
(designItem.element.nextElementSibling instanceof HTMLElement && !isInline(designItem.element.nextElementSibling)))
|
|
37
|
+
indentedTextWriter.writeNewline();
|
|
38
|
+
}
|
|
39
|
+
write(indentedTextWriter, designItem, options, designItemsAssignmentList) {
|
|
40
|
+
let start = indentedTextWriter.position;
|
|
41
|
+
if (designItem.nodeType == NodeType.TextNode) {
|
|
42
|
+
this._conditionalyWriteIndent(indentedTextWriter, designItem);
|
|
43
|
+
this.writeTextNode(indentedTextWriter, designItem, true);
|
|
44
|
+
}
|
|
45
|
+
else if (designItem.nodeType == NodeType.Comment) {
|
|
46
|
+
this._conditionalyWriteIndent(indentedTextWriter, designItem);
|
|
47
|
+
indentedTextWriter.write('<!--' + designItem.content + '-->');
|
|
48
|
+
this._conditionalyWriteNewline(indentedTextWriter, designItem);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this._conditionalyWriteIndent(indentedTextWriter, designItem);
|
|
52
|
+
indentedTextWriter.write('<' + designItem.name);
|
|
53
|
+
if (designItem.hasAttributes) {
|
|
54
|
+
for (const a of designItem.attributes) {
|
|
55
|
+
indentedTextWriter.write(' ');
|
|
56
|
+
if (typeof a[1] === 'string') {
|
|
57
|
+
if (a[1] === "")
|
|
58
|
+
indentedTextWriter.write(a[0]);
|
|
59
|
+
else
|
|
60
|
+
indentedTextWriter.write(a[0] + '="' + DomConverter.normalizeAttributeValue(a[1]) + '"');
|
|
61
|
+
}
|
|
62
|
+
else if (!a[1])
|
|
63
|
+
indentedTextWriter.write(a[0]);
|
|
64
|
+
else {
|
|
65
|
+
//TODO: writing of bindings
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (designItem.hasStyles) {
|
|
70
|
+
indentedTextWriter.write(' style="');
|
|
71
|
+
let styles = designItem.styles;
|
|
72
|
+
if (options.compressCssToShorthandProperties)
|
|
73
|
+
styles = CssCombiner.combine(styles);
|
|
74
|
+
for (const s of styles) {
|
|
75
|
+
if (s[0]) {
|
|
76
|
+
indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
indentedTextWriter.write('"');
|
|
80
|
+
}
|
|
81
|
+
indentedTextWriter.write('>');
|
|
82
|
+
if (designItem.hasChildren) {
|
|
83
|
+
const children = designItem.children();
|
|
84
|
+
const singleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
|
|
85
|
+
if (singleTextNode) {
|
|
86
|
+
this.writeTextNode(indentedTextWriter, designItem, false);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
indentedTextWriter.writeNewline();
|
|
90
|
+
indentedTextWriter.levelRaise();
|
|
91
|
+
for (const c of children) {
|
|
92
|
+
c.serviceContainer.forSomeServicesTillResult('htmlWriterService', (s) => {
|
|
93
|
+
if (s.canWrite(c)) {
|
|
94
|
+
s.write(indentedTextWriter, c, options, designItemsAssignmentList);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
indentedTextWriter.levelShrink();
|
|
99
|
+
indentedTextWriter.writeIndent();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else if (designItem.hasContent) {
|
|
103
|
+
indentedTextWriter.write(DomConverter.normalizeContentValue(designItem.content));
|
|
104
|
+
}
|
|
105
|
+
if (!DomConverter.IsSelfClosingElement(designItem.name))
|
|
106
|
+
indentedTextWriter.write('</' + designItem.name + '>');
|
|
107
|
+
this._conditionalyWriteNewline(indentedTextWriter, designItem);
|
|
108
|
+
}
|
|
109
|
+
if (designItemsAssignmentList) {
|
|
110
|
+
designItemsAssignmentList.set(designItem, { start: start, length: indentedTextWriter.position - start - 1 });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
writeTextNode(indentedTextWriter, designItem, indentAndNewline) {
|
|
114
|
+
let content = DomConverter.normalizeContentValue(designItem.content).trim();
|
|
115
|
+
if (content) {
|
|
116
|
+
if (indentAndNewline)
|
|
117
|
+
this._conditionalyWriteIndent(indentedTextWriter, designItem);
|
|
118
|
+
indentedTextWriter.write(content);
|
|
119
|
+
if (indentAndNewline)
|
|
120
|
+
this._conditionalyWriteNewline(indentedTextWriter, designItem);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IDesignItem } from '../../item/IDesignItem';
|
|
2
|
+
import { IHtmlWriterService } from './IHtmlWriterService';
|
|
3
|
+
import { IHtmlWriterOptions } from './IHtmlWriterOptions';
|
|
4
|
+
import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
|
|
5
|
+
import { IStringPosition } from './IStringPosition';
|
|
6
|
+
export declare class LitTsElementWriterService implements IHtmlWriterService {
|
|
7
|
+
write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
|
|
8
|
+
static head: string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//needs InternalBindinsgStorrageService -> keeps bindings
|
|
2
|
+
export class LitTsElementWriterService {
|
|
3
|
+
write(indentedTextWriter, designItems, rootContainerKeepInline, options, designItemsAssignmentList) {
|
|
4
|
+
throw new Error('Method not implemented.');
|
|
5
|
+
}
|
|
6
|
+
static head = `import { html, css, LitElement, CSSResultArray } from 'lit';
|
|
7
|
+
import { property, customElement } from 'lit/decorators.js';
|
|
8
|
+
|
|
9
|
+
@customElement('$$elementName')
|
|
10
|
+
class $$className extends LitElement {
|
|
11
|
+
static get styles(): CSSResultArray {
|
|
12
|
+
return [
|
|
13
|
+
css\`
|
|
14
|
+
$$css
|
|
15
|
+
\`,
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//@property({ type: String }) btnStyle: QingButtonStyle = '';
|
|
20
|
+
//@property({ type: Boolean, reflect: true }) selected = false;
|
|
21
|
+
|
|
22
|
+
//private buttonElement: HTMLButtonElement | null = null;
|
|
23
|
+
|
|
24
|
+
/*firstUpdated() {
|
|
25
|
+
if (!this.shadowRoot) {
|
|
26
|
+
throw new Error('Unexpected undefined shadowRoot');
|
|
27
|
+
}
|
|
28
|
+
this.buttonElement = this.shadowRoot.querySelector('button');
|
|
29
|
+
}*/
|
|
30
|
+
|
|
31
|
+
render() {
|
|
32
|
+
return html\`$$html\`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default $$className;
|
|
37
|
+
|
|
38
|
+
declare global {
|
|
39
|
+
interface HTMLElementTagNameMap {
|
|
40
|
+
'$$elementName': $$className;
|
|
41
|
+
}
|
|
42
|
+
}`;
|
|
43
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { IDesignItem } from '../../item/IDesignItem';
|
|
2
|
+
import { IHtmlWriterService } from './IHtmlWriterService';
|
|
3
|
+
import { IHtmlWriterOptions } from './IHtmlWriterOptions';
|
|
4
|
+
import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
|
|
5
|
+
import { IStringPosition } from './IStringPosition';
|
|
6
|
+
declare enum ElementContainerType {
|
|
7
|
+
block = 0,
|
|
8
|
+
complex = 1
|
|
9
|
+
}
|
|
10
|
+
export declare class FormatingHtmlWriterService implements IHtmlWriterService {
|
|
11
|
+
private writeAttributes;
|
|
12
|
+
private writeStyles;
|
|
13
|
+
private _writeTextNode;
|
|
14
|
+
private _writeCommentNode;
|
|
15
|
+
private _writeElementNode;
|
|
16
|
+
private _writeDesignItemList;
|
|
17
|
+
private _writeNewlineAndIntend;
|
|
18
|
+
private _writeInternal;
|
|
19
|
+
getContainerType(element: HTMLElement): ElementContainerType;
|
|
20
|
+
write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { DomConverter } from '../../widgets/designerView/DomConverter';
|
|
2
|
+
import { CssCombiner } from '../../helper/CssCombiner';
|
|
3
|
+
import { NodeType } from '../../item/NodeType';
|
|
4
|
+
import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper';
|
|
5
|
+
import { ElementDisplayType, getElementDisplaytype } from '../../helper/ElementHelper.js';
|
|
6
|
+
var ElementContainerType;
|
|
7
|
+
(function (ElementContainerType) {
|
|
8
|
+
ElementContainerType[ElementContainerType["block"] = 0] = "block";
|
|
9
|
+
ElementContainerType[ElementContainerType["complex"] = 1] = "complex";
|
|
10
|
+
})(ElementContainerType || (ElementContainerType = {}));
|
|
11
|
+
const defaultDisplayNoneContainerDisplayType = ElementContainerType.complex;
|
|
12
|
+
export class FormatingHtmlWriterService {
|
|
13
|
+
writeAttributes(writeContext, designItem) {
|
|
14
|
+
if (designItem.hasAttributes) {
|
|
15
|
+
for (const a of designItem.attributes) {
|
|
16
|
+
writeContext.indentedTextWriter.write(' ');
|
|
17
|
+
if (typeof a[1] === 'string') {
|
|
18
|
+
if (a[1] === "")
|
|
19
|
+
writeContext.indentedTextWriter.write(a[0]);
|
|
20
|
+
else
|
|
21
|
+
writeContext.indentedTextWriter.write(a[0] + '="' + DomConverter.normalizeAttributeValue(a[1]) + '"');
|
|
22
|
+
}
|
|
23
|
+
else if (!a[1])
|
|
24
|
+
writeContext.indentedTextWriter.write(a[0]);
|
|
25
|
+
else {
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
writeStyles(writeContext, designItem) {
|
|
31
|
+
if (designItem.hasStyles) {
|
|
32
|
+
writeContext.indentedTextWriter.write(' style="');
|
|
33
|
+
let styles = designItem.styles;
|
|
34
|
+
if (writeContext.options.compressCssToShorthandProperties)
|
|
35
|
+
styles = CssCombiner.combine(styles);
|
|
36
|
+
for (const s of styles) {
|
|
37
|
+
if (s[0]) {
|
|
38
|
+
writeContext.indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
writeContext.indentedTextWriter.write('"');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
_writeTextNode(writeContext, designItem) {
|
|
45
|
+
writeContext.lastElementDisplayType = ElementDisplayType.inline;
|
|
46
|
+
let content = DomConverter.normalizeContentValue(designItem.content).trim();
|
|
47
|
+
if (content) {
|
|
48
|
+
writeContext.indentedTextWriter.write(content);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
_writeCommentNode(writeContext, designItem) {
|
|
52
|
+
writeContext.indentedTextWriter.write('<!--' + designItem.content + '-->');
|
|
53
|
+
}
|
|
54
|
+
_writeElementNode(writeContext, designItem) {
|
|
55
|
+
const currentElementDisplayType = getElementDisplaytype(designItem.element);
|
|
56
|
+
writeContext.lastElementDisplayType = currentElementDisplayType;
|
|
57
|
+
writeContext.indentedTextWriter.write('<' + designItem.name);
|
|
58
|
+
this.writeAttributes(writeContext, designItem);
|
|
59
|
+
this.writeStyles(writeContext, designItem);
|
|
60
|
+
writeContext.indentedTextWriter.write('>');
|
|
61
|
+
if (designItem.hasChildren) {
|
|
62
|
+
const children = designItem.children();
|
|
63
|
+
const contentSingleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
|
|
64
|
+
if (contentSingleTextNode) {
|
|
65
|
+
this._writeInternal(writeContext, designItem.firstChild);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
let previousContainerDisplayType = writeContext.containerDisplayType;
|
|
69
|
+
writeContext.containerDisplayType = this.getContainerType(designItem.element);
|
|
70
|
+
writeContext.indentedTextWriter.levelRaise();
|
|
71
|
+
this._writeDesignItemList(currentElementDisplayType, writeContext, children);
|
|
72
|
+
writeContext.indentedTextWriter.levelShrink();
|
|
73
|
+
writeContext.containerDisplayType = previousContainerDisplayType;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (designItem.hasContent) {
|
|
77
|
+
writeContext.indentedTextWriter.write(DomConverter.normalizeContentValue(designItem.content));
|
|
78
|
+
}
|
|
79
|
+
if (!DomConverter.IsSelfClosingElement(designItem.name)) {
|
|
80
|
+
//write newline & intend ???
|
|
81
|
+
writeContext.indentedTextWriter.write('</' + designItem.name + '>');
|
|
82
|
+
if (currentElementDisplayType !== ElementDisplayType.none) {
|
|
83
|
+
writeContext.lastElementDisplayType = currentElementDisplayType;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
_writeDesignItemList(currentElementDisplayType, writeContext, children) {
|
|
88
|
+
for (const c of children) {
|
|
89
|
+
if (writeContext.lastElementDisplayType == null) {
|
|
90
|
+
//first entry, do nothing
|
|
91
|
+
}
|
|
92
|
+
else if (writeContext.containerDisplayType === ElementContainerType.complex)
|
|
93
|
+
this._writeNewlineAndIntend(writeContext);
|
|
94
|
+
else if (writeContext.lastElementDisplayType !== ElementDisplayType.inline || currentElementDisplayType !== ElementDisplayType.inline)
|
|
95
|
+
this._writeNewlineAndIntend(writeContext);
|
|
96
|
+
this._writeInternal(writeContext, c);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
_writeNewlineAndIntend(writeContext) {
|
|
100
|
+
writeContext.indentedTextWriter.writeNewline();
|
|
101
|
+
writeContext.indentedTextWriter.writeIndent();
|
|
102
|
+
}
|
|
103
|
+
_writeInternal(writeContext, designItem) {
|
|
104
|
+
const start = writeContext.indentedTextWriter.position;
|
|
105
|
+
if (designItem.nodeType === NodeType.TextNode)
|
|
106
|
+
this._writeTextNode(writeContext, designItem);
|
|
107
|
+
else if (designItem.nodeType === NodeType.Comment)
|
|
108
|
+
this._writeCommentNode(writeContext, designItem);
|
|
109
|
+
else if (designItem.nodeType === NodeType.Element)
|
|
110
|
+
this._writeElementNode(writeContext, designItem);
|
|
111
|
+
if (writeContext.designItemsAssignmentList) {
|
|
112
|
+
writeContext.designItemsAssignmentList.set(designItem, { start: start, length: writeContext.indentedTextWriter.position - start - 1 });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
getContainerType(element) {
|
|
116
|
+
const display = window.getComputedStyle(element).display;
|
|
117
|
+
if (display === 'block' || display === "inline-block" || display == '')
|
|
118
|
+
return ElementContainerType.block;
|
|
119
|
+
return ElementContainerType.complex;
|
|
120
|
+
}
|
|
121
|
+
write(indentedTextWriter, designItems, rootContainerKeepInline, options, designItemsAssignmentList) {
|
|
122
|
+
const context = { indentedTextWriter, options, lastElementDisplayType: null, containerDisplayType: ElementContainerType.block, designItemsAssignmentList };
|
|
123
|
+
this._writeDesignItemList(ElementDisplayType.inline, context, designItems);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { IDesignItem } from '../../item/IDesignItem';
|
|
2
|
+
import { IHtmlWriterService } from './IHtmlWriterService';
|
|
3
|
+
import { IHtmlWriterOptions } from './IHtmlWriterOptions';
|
|
4
|
+
import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
|
|
5
|
+
import { IStringPosition } from './IStringPosition';
|
|
6
|
+
import { ElementDisplayType } from '../../helper/ElementHelper.js';
|
|
7
|
+
export declare enum ElementContainerType {
|
|
8
|
+
block = 0,
|
|
9
|
+
complex = 1
|
|
10
|
+
}
|
|
11
|
+
export interface IWriteContext {
|
|
12
|
+
options: IHtmlWriterOptions;
|
|
13
|
+
indentedTextWriter: IndentedTextWriter;
|
|
14
|
+
lastElementDisplayType: ElementDisplayType | null;
|
|
15
|
+
containerDisplayType: ElementContainerType;
|
|
16
|
+
designItemsAssignmentList?: Map<IDesignItem, IStringPosition>;
|
|
17
|
+
}
|
|
18
|
+
export declare class SimpleHtmlWriterService implements IHtmlWriterService {
|
|
19
|
+
protected writeAttributes(writeContext: IWriteContext, designItem: IDesignItem): void;
|
|
20
|
+
protected writeStyles(writeContext: IWriteContext, designItem: IDesignItem): void;
|
|
21
|
+
private _writeTextNode;
|
|
22
|
+
private _writeCommentNode;
|
|
23
|
+
private _writeElementNode;
|
|
24
|
+
private _writeDesignItemList;
|
|
25
|
+
private _writeInternal;
|
|
26
|
+
write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
|
|
27
|
+
}
|