@node-projects/web-component-designer 0.0.76 → 0.0.80
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/.github/FUNDING.yml +1 -0
- 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/helper/PathDataPolyfill.js +1 -1
- 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 +2 -1
- package/dist/elements/services/demoProviderService/IDemoProviderService.d.ts +1 -1
- 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.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/LitTsElementWriterService.d.ts +9 -0
- package/dist/elements/services/htmlWriterService/LitTsElementWriterService.js +43 -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/manifestParsers/WebcomponentManifestParserService.d.ts +3 -1
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +39 -27
- package/dist/elements/widgets/codeView/code-view-ace.js +1 -1
- 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/extensions/PathExtension.d.ts +3 -1
- package/dist/elements/widgets/designerView/extensions/PathExtension.js +59 -5
- package/dist/elements/widgets/designerView/overlayLayerView.js +1 -2
- package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +0 -1
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +12 -8
- package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/package.json +4 -4
- package/dist/elements/services/manifestLoaders/WebcomponentManifestParserService.d.ts +0 -26
- package/dist/elements/services/manifestLoaders/WebcomponentManifestParserService.js +0 -69
- package/dist/elements/services/webcomponentManifestParserService/WebcomponentManifestParserService.1.d.ts +0 -0
- package/dist/elements/services/webcomponentManifestParserService/WebcomponentManifestParserService.1.js +0 -1
- package/dist/elements/services/webcomponentManifestParserService/webcomponentManifestParserService.d.ts +0 -26
- package/dist/elements/services/webcomponentManifestParserService/webcomponentManifestParserService.js +0 -69
package/.github/FUNDING.yml
CHANGED
|
@@ -13,6 +13,9 @@ export declare class DocumentContainer extends BaseCustomWebComponentLazyAppend
|
|
|
13
13
|
codeView: ICodeView & HTMLElement;
|
|
14
14
|
demoView: IDemoView & HTMLElement;
|
|
15
15
|
additionalData: any;
|
|
16
|
+
private _additionalStyle;
|
|
17
|
+
set additionalStyleString(style: string);
|
|
18
|
+
get additionalStyleString(): string;
|
|
16
19
|
private _serviceContainer;
|
|
17
20
|
private _content;
|
|
18
21
|
private _tabControl;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseCustomWebComponentLazyAppend, css, debounce } from "@node-projects/base-custom-webcomponent";
|
|
1
|
+
import { BaseCustomWebComponentLazyAppend, css, cssFromString, debounce } from "@node-projects/base-custom-webcomponent";
|
|
2
2
|
import { DesignerTabControl } from "./controls/DesignerTabControl";
|
|
3
3
|
import { DesignerView } from "./widgets/designerView/designerView";
|
|
4
4
|
import { SimpleSplitView } from './controls/SimpleSplitView';
|
|
@@ -7,6 +7,16 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
|
|
|
7
7
|
codeView;
|
|
8
8
|
demoView;
|
|
9
9
|
additionalData;
|
|
10
|
+
_additionalStyle;
|
|
11
|
+
set additionalStyleString(style) {
|
|
12
|
+
this._additionalStyle = style;
|
|
13
|
+
this.designerView.additionalStyle = cssFromString(style);
|
|
14
|
+
}
|
|
15
|
+
;
|
|
16
|
+
get additionalStyleString() {
|
|
17
|
+
return this._additionalStyle;
|
|
18
|
+
}
|
|
19
|
+
;
|
|
10
20
|
_serviceContainer;
|
|
11
21
|
_content = '';
|
|
12
22
|
_tabControl;
|
|
@@ -136,7 +146,7 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
|
|
|
136
146
|
else if (this._tabControl.selectedIndex === 2) {
|
|
137
147
|
}
|
|
138
148
|
else if (this._tabControl.selectedIndex === 3)
|
|
139
|
-
this.demoView.display(this._serviceContainer, this.designerView.instanceServiceContainer, this._content);
|
|
149
|
+
this.demoView.display(this._serviceContainer, this.designerView.instanceServiceContainer, this._content, this.additionalStyleString);
|
|
140
150
|
}
|
|
141
151
|
}
|
|
142
152
|
get content() {
|
|
@@ -181,7 +191,7 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
|
|
|
181
191
|
this._splitDiv.appendChild(this.codeView);
|
|
182
192
|
}
|
|
183
193
|
if (i.newIndex === 3) {
|
|
184
|
-
this.demoView.display(this._serviceContainer, this.designerView.instanceServiceContainer, this._content);
|
|
194
|
+
this.demoView.display(this._serviceContainer, this.designerView.instanceServiceContainer, this._content, this.additionalStyleString);
|
|
185
195
|
}
|
|
186
196
|
});
|
|
187
197
|
if (this._content)
|
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
export declare function newElementFromString(text: any): Element;
|
|
2
|
+
export declare enum ElementDisplayType {
|
|
3
|
+
none = 0,
|
|
4
|
+
inline = 1,
|
|
5
|
+
block = 2
|
|
6
|
+
}
|
|
2
7
|
export declare function isInline(element: HTMLElement): boolean;
|
|
8
|
+
export declare function getElementDisplaytype(element: HTMLElement): ElementDisplayType;
|
|
9
|
+
export declare function isEmptyTextNode(node: Node): boolean;
|
|
@@ -4,6 +4,19 @@ export function newElementFromString(text) {
|
|
|
4
4
|
const fragment = range.createContextualFragment(text);
|
|
5
5
|
return fragment.firstChild;
|
|
6
6
|
}
|
|
7
|
+
export var ElementDisplayType;
|
|
8
|
+
(function (ElementDisplayType) {
|
|
9
|
+
ElementDisplayType[ElementDisplayType["none"] = 0] = "none";
|
|
10
|
+
ElementDisplayType[ElementDisplayType["inline"] = 1] = "inline";
|
|
11
|
+
ElementDisplayType[ElementDisplayType["block"] = 2] = "block";
|
|
12
|
+
})(ElementDisplayType || (ElementDisplayType = {}));
|
|
7
13
|
export function isInline(element) {
|
|
8
14
|
return element != null && window.getComputedStyle(element).display.startsWith('inline');
|
|
9
15
|
}
|
|
16
|
+
export function getElementDisplaytype(element) {
|
|
17
|
+
const display = window.getComputedStyle(element).display;
|
|
18
|
+
return display == 'none' ? ElementDisplayType.none : display.startsWith('inline') ? ElementDisplayType.inline : ElementDisplayType.block;
|
|
19
|
+
}
|
|
20
|
+
export function isEmptyTextNode(node) {
|
|
21
|
+
return node.textContent.trim() == '' && node.textContent.indexOf('\xa0' /* */) < 0;
|
|
22
|
+
}
|
|
@@ -857,7 +857,7 @@ if (!SVGPathElement.prototype.getPathData || !SVGPathElement.prototype.setPathDa
|
|
|
857
857
|
})();
|
|
858
858
|
}
|
|
859
859
|
export function straightenLine(p1, p2) {
|
|
860
|
-
let newP
|
|
860
|
+
let newP;
|
|
861
861
|
let alpha = calculateAlpha(p1, p2);
|
|
862
862
|
let normLength;
|
|
863
863
|
if ((alpha >= 337.5 && alpha < 360 || alpha >= 0 && alpha < 22.5)) { // 0
|
|
@@ -4,7 +4,6 @@ import { LitElementPropertiesService } from './propertiesService/services/LitEle
|
|
|
4
4
|
import { NativeElementsPropertiesService } from './propertiesService/services/NativeElementsPropertiesService.js';
|
|
5
5
|
import { DefaultInstanceService } from './instanceService/DefaultInstanceService.js';
|
|
6
6
|
import { DefaultEditorTypesService } from './propertiesService/DefaultEditorTypesService.js';
|
|
7
|
-
import { HtmlWriterService } from './htmlWriterService/HtmlWriterService.js';
|
|
8
7
|
import { BaseCustomWebComponentPropertiesService } from './propertiesService/services/BaseCustomWebComponentPropertiesService.js';
|
|
9
8
|
import { DefaultPlacementService } from './placementService/DefaultPlacementService.js';
|
|
10
9
|
import { DefaultHtmlParserService } from './htmlParserService/DefaultHtmlParserService.js';
|
|
@@ -52,6 +51,7 @@ import { DemoProviderService } from './demoProviderService/DemoProviderService';
|
|
|
52
51
|
import { DrawRectTool } from '../widgets/designerView/tools/DrawRectTool.js';
|
|
53
52
|
import { DrawEllipsisTool } from '../widgets/designerView/tools/DrawEllipsisTool.js';
|
|
54
53
|
import { DrawLineTool } from '../widgets/designerView/tools/DrawLineTool.js';
|
|
54
|
+
import { HtmlWriterService } from './htmlWriterService/HtmlWriterService.js';
|
|
55
55
|
export function createDefaultServiceContainer() {
|
|
56
56
|
let serviceContainer = new ServiceContainer();
|
|
57
57
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -67,7 +67,7 @@ export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMa
|
|
|
67
67
|
get elementsServices(): IElementsService[];
|
|
68
68
|
get instanceServices(): IInstanceService[];
|
|
69
69
|
get editorTypesServices(): IEditorTypesService[];
|
|
70
|
-
get
|
|
70
|
+
get htmlWriterService(): IHtmlWriterService;
|
|
71
71
|
get htmlParserService(): IHtmlParserService;
|
|
72
72
|
get intializationService(): IIntializationService;
|
|
73
73
|
get elementAtPointService(): IElementAtPointService;
|
|
@@ -40,8 +40,8 @@ export class ServiceContainer extends BaseServiceContainer {
|
|
|
40
40
|
get editorTypesServices() {
|
|
41
41
|
return this.getServices('editorTypesService');
|
|
42
42
|
}
|
|
43
|
-
get
|
|
44
|
-
return this.
|
|
43
|
+
get htmlWriterService() {
|
|
44
|
+
return this.getLastService('htmlWriterService');
|
|
45
45
|
}
|
|
46
46
|
get htmlParserService() {
|
|
47
47
|
return this.getLastService('htmlParserService');
|
|
@@ -2,5 +2,5 @@ import { InstanceServiceContainer } from "../InstanceServiceContainer.js";
|
|
|
2
2
|
import { ServiceContainer } from "../ServiceContainer.js";
|
|
3
3
|
import { IDemoProviderService } from "./IDemoProviderService.js";
|
|
4
4
|
export declare class DemoProviderService implements IDemoProviderService {
|
|
5
|
-
provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string): Promise<void>;
|
|
5
|
+
provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string, style: string): Promise<void>;
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper';
|
|
2
2
|
export class DemoProviderService {
|
|
3
|
-
provideDemo(container, serviceContainer, instanceServiceContainer, code) {
|
|
3
|
+
provideDemo(container, serviceContainer, instanceServiceContainer, code, style) {
|
|
4
4
|
return new Promise(resolve => {
|
|
5
5
|
const iframe = document.createElement('iframe');
|
|
6
6
|
iframe.style.width = '100%';
|
|
@@ -21,6 +21,7 @@ export class DemoProviderService {
|
|
|
21
21
|
}
|
|
22
22
|
doc.write("document.body.style.display='';");
|
|
23
23
|
doc.write('</script>');
|
|
24
|
+
doc.write('<style>' + (style ?? '') + '</style>');
|
|
24
25
|
doc.write('<body style="display:none; width: 100%; height: 100%; margin: 0; padding: 0; position: absolute;">' + code + '</body>');
|
|
25
26
|
doc.close();
|
|
26
27
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InstanceServiceContainer } from "../InstanceServiceContainer.js";
|
|
2
2
|
import { ServiceContainer } from "../ServiceContainer.js";
|
|
3
3
|
export interface IDemoProviderService {
|
|
4
|
-
provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string): any;
|
|
4
|
+
provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string, style: string): any;
|
|
5
5
|
}
|
|
@@ -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,133 @@
|
|
|
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 = 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 cs = getComputedStyle(designItem.element);
|
|
56
|
+
//cs.whiteSpace === 'pre'
|
|
57
|
+
//isInPre
|
|
58
|
+
//is in inline?
|
|
59
|
+
const currentElementDisplayType = getElementDisplaytype(designItem.element);
|
|
60
|
+
writeContext.lastElementDisplayType = currentElementDisplayType;
|
|
61
|
+
writeContext.indentedTextWriter.write('<' + designItem.name);
|
|
62
|
+
this.writeAttributes(writeContext, designItem);
|
|
63
|
+
this.writeStyles(writeContext, designItem);
|
|
64
|
+
writeContext.indentedTextWriter.write('>');
|
|
65
|
+
let contentSingleTextNode = false;
|
|
66
|
+
if (designItem.hasChildren) {
|
|
67
|
+
const children = designItem.children();
|
|
68
|
+
contentSingleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
|
|
69
|
+
if (contentSingleTextNode) {
|
|
70
|
+
this._writeInternal(writeContext, designItem.firstChild);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
let previousContainerDisplayType = writeContext.containerDisplayType;
|
|
74
|
+
writeContext.containerDisplayType = this.getContainerType(designItem.element);
|
|
75
|
+
writeContext.indentedTextWriter.levelRaise();
|
|
76
|
+
this._writeDesignItemList(currentElementDisplayType, writeContext, children);
|
|
77
|
+
writeContext.indentedTextWriter.levelShrink();
|
|
78
|
+
writeContext.containerDisplayType = previousContainerDisplayType;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else if (designItem.hasContent) {
|
|
82
|
+
writeContext.indentedTextWriter.write(DomConverter.normalizeContentValue(designItem.content));
|
|
83
|
+
}
|
|
84
|
+
if (!DomConverter.IsSelfClosingElement(designItem.name)) {
|
|
85
|
+
if (currentElementDisplayType === ElementDisplayType.block && designItem.hasChildren && !contentSingleTextNode) {
|
|
86
|
+
this._writeNewlineAndIntend(writeContext);
|
|
87
|
+
}
|
|
88
|
+
//write newline & intend ???
|
|
89
|
+
writeContext.indentedTextWriter.write('</' + designItem.name + '>');
|
|
90
|
+
if (currentElementDisplayType !== ElementDisplayType.none) {
|
|
91
|
+
writeContext.lastElementDisplayType = currentElementDisplayType;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
_writeDesignItemList(currentElementDisplayType, writeContext, children) {
|
|
96
|
+
for (const c of children) {
|
|
97
|
+
if (writeContext.lastElementDisplayType == null) {
|
|
98
|
+
//first entry, do nothing
|
|
99
|
+
}
|
|
100
|
+
else if (writeContext.containerDisplayType === ElementContainerType.complex)
|
|
101
|
+
this._writeNewlineAndIntend(writeContext);
|
|
102
|
+
else if (writeContext.lastElementDisplayType !== ElementDisplayType.inline /*|| currentElementDisplayType !== ElementDisplayType.inline*/)
|
|
103
|
+
this._writeNewlineAndIntend(writeContext);
|
|
104
|
+
this._writeInternal(writeContext, c);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
_writeNewlineAndIntend(writeContext) {
|
|
108
|
+
writeContext.indentedTextWriter.writeNewline();
|
|
109
|
+
writeContext.indentedTextWriter.writeIndent();
|
|
110
|
+
}
|
|
111
|
+
_writeInternal(writeContext, designItem) {
|
|
112
|
+
const start = writeContext.indentedTextWriter.position;
|
|
113
|
+
if (designItem.nodeType === NodeType.TextNode)
|
|
114
|
+
this._writeTextNode(writeContext, designItem);
|
|
115
|
+
else if (designItem.nodeType === NodeType.Comment)
|
|
116
|
+
this._writeCommentNode(writeContext, designItem);
|
|
117
|
+
else if (designItem.nodeType === NodeType.Element)
|
|
118
|
+
this._writeElementNode(writeContext, designItem);
|
|
119
|
+
if (writeContext.designItemsAssignmentList) {
|
|
120
|
+
writeContext.designItemsAssignmentList.set(designItem, { start: start, length: writeContext.indentedTextWriter.position - start - 1 });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
getContainerType(element) {
|
|
124
|
+
const display = window.getComputedStyle(element).display;
|
|
125
|
+
if (display === 'block' || display === "inline-block" || display == '')
|
|
126
|
+
return ElementContainerType.block;
|
|
127
|
+
return ElementContainerType.complex;
|
|
128
|
+
}
|
|
129
|
+
write(indentedTextWriter, designItems, rootContainerKeepInline, options, designItemsAssignmentList) {
|
|
130
|
+
const context = { indentedTextWriter, options, lastElementDisplayType: null, containerDisplayType: ElementContainerType.block, designItemsAssignmentList };
|
|
131
|
+
this._writeDesignItemList(ElementDisplayType.inline, context, designItems);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -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,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,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
|
+
}
|