@node-projects/web-component-designer 0.0.78 → 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.
Files changed (33) hide show
  1. package/dist/elements/helper/ElementHelper.d.ts +6 -0
  2. package/dist/elements/helper/ElementHelper.js +10 -0
  3. package/dist/elements/services/DefaultServiceBootstrap.js +1 -1
  4. package/dist/elements/services/ServiceContainer.d.ts +1 -1
  5. package/dist/elements/services/ServiceContainer.js +2 -2
  6. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService copy.d.ts +22 -0
  7. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService copy.js +125 -0
  8. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.d.ts +22 -0
  9. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +133 -0
  10. package/dist/elements/services/htmlWriterService/HtmlWriterService copy.d.ts +15 -5
  11. package/dist/elements/services/htmlWriterService/HtmlWriterService copy.js +101 -86
  12. package/dist/elements/services/htmlWriterService/HtmlWriterService.d.ts +2 -2
  13. package/dist/elements/services/htmlWriterService/HtmlWriterService.js +7 -9
  14. package/dist/elements/services/htmlWriterService/IHtmlWriterService.d.ts +5 -6
  15. package/dist/elements/services/htmlWriterService/LitElementWriterService.d.ts +3 -1
  16. package/dist/elements/services/htmlWriterService/LitElementWriterService.js +17 -1
  17. package/dist/elements/services/htmlWriterService/LitTsElementWriterService.d.ts +9 -0
  18. package/dist/elements/services/htmlWriterService/LitTsElementWriterService.js +43 -0
  19. package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService copy.d.ts +22 -0
  20. package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService copy.js +125 -0
  21. package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService.d.ts +27 -0
  22. package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService.js +93 -0
  23. package/dist/elements/services/initializationService/DefaultIntializationService.d.ts +6 -0
  24. package/dist/elements/services/initializationService/DefaultIntializationService.js +22 -0
  25. package/dist/elements/services/initializationService/IIntializationService copy.d.ts +4 -0
  26. package/dist/elements/services/initializationService/IIntializationService copy.js +1 -0
  27. package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.d.ts +3 -1
  28. package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +39 -27
  29. package/dist/elements/widgets/designerView/DomConverter.js +1 -7
  30. package/dist/elements/widgets/designerView/overlayLayerView.js +1 -2
  31. package/dist/index.d.ts +2 -0
  32. package/dist/index.js +2 -0
  33. package/package.json +4 -4
@@ -1,3 +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;
3
9
  export declare function isEmptyTextNode(node: Node): boolean;
@@ -4,9 +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
+ }
10
20
  export function isEmptyTextNode(node) {
11
21
  return node.textContent.trim() == '' && node.textContent.indexOf('\xa0' /* &nbsp; */) < 0;
12
22
  }
@@ -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 htmlWriterServices(): IHtmlWriterService[];
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 htmlWriterServices() {
44
- return this.getServices('htmlWriterService');
43
+ get htmlWriterService() {
44
+ return this.getLastService('htmlWriterService');
45
45
  }
46
46
  get htmlParserService() {
47
47
  return this.getLastService('htmlParserService');
@@ -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,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
+ }
@@ -3,10 +3,20 @@ import { IHtmlWriterService } from './IHtmlWriterService';
3
3
  import { IHtmlWriterOptions } from './IHtmlWriterOptions';
4
4
  import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
5
5
  import { IStringPosition } from './IStringPosition';
6
+ declare enum ElementContainerType {
7
+ block = 0,
8
+ complex = 1
9
+ }
6
10
  export declare class HtmlWriterService implements IHtmlWriterService {
7
- canWrite(designItem: IDesignItem): boolean;
8
- private _conditionalyWriteIndent;
9
- private _conditionalyWriteNewline;
10
- write(indentedTextWriter: IndentedTextWriter, designItem: IDesignItem, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
11
- private writeTextNode;
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;
12
21
  }
22
+ export {};
@@ -2,102 +2,117 @@ 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 { 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 = {}));
6
11
  export class HtmlWriterService {
7
- canWrite(designItem) {
8
- return true;
9
- }
10
- _conditionalyWriteIndent(indentedTextWriter, designItem) {
11
- if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
12
- (designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling)))
13
- indentedTextWriter.writeIndent();
14
- }
15
- _conditionalyWriteNewline(indentedTextWriter, designItem) {
16
- if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
17
- (designItem.element.nextElementSibling instanceof HTMLElement && !isInline(designItem.element.nextElementSibling)))
18
- indentedTextWriter.writeNewline();
19
- }
20
- write(indentedTextWriter, designItem, options, designItemsAssignmentList) {
21
- let start = indentedTextWriter.position;
22
- if (designItem.nodeType == NodeType.TextNode) {
23
- this.writeTextNode(indentedTextWriter, designItem, true);
24
- }
25
- else if (designItem.nodeType == NodeType.Comment) {
26
- this._conditionalyWriteIndent(indentedTextWriter, designItem);
27
- indentedTextWriter.write('<!--' + designItem.content + '-->');
28
- this._conditionalyWriteNewline(indentedTextWriter, designItem);
29
- }
30
- else {
31
- this._conditionalyWriteIndent(indentedTextWriter, designItem);
32
- indentedTextWriter.write('<' + designItem.name);
33
- if (designItem.hasAttributes) {
34
- for (const a of designItem.attributes) {
35
- indentedTextWriter.write(' ');
36
- if (typeof a[1] === 'string') {
37
- if (a[1] === "")
38
- indentedTextWriter.write(a[0]);
39
- else
40
- indentedTextWriter.write(a[0] + '="' + DomConverter.normalizeAttributeValue(a[1]) + '"');
41
- }
42
- else if (!a[1])
43
- indentedTextWriter.write(a[0]);
44
- else {
45
- //TODO: writing of bindings
46
- }
47
- }
48
- }
49
- if (designItem.hasStyles) {
50
- indentedTextWriter.write(' style="');
51
- let styles = designItem.styles;
52
- if (options.compressCssToShorthandProperties)
53
- styles = CssCombiner.combine(styles);
54
- for (const s of styles) {
55
- if (s[0]) {
56
- indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
57
- }
58
- }
59
- indentedTextWriter.write('"');
60
- }
61
- indentedTextWriter.write('>');
62
- if (designItem.hasChildren) {
63
- const children = designItem.children();
64
- const singleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
65
- if (singleTextNode) {
66
- this.writeTextNode(indentedTextWriter, designItem, false);
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]) + '"');
67
21
  }
22
+ else if (!a[1])
23
+ writeContext.indentedTextWriter.write(a[0]);
68
24
  else {
69
- indentedTextWriter.writeNewline();
70
- indentedTextWriter.levelRaise();
71
- for (const c of children) {
72
- c.serviceContainer.forSomeServicesTillResult('htmlWriterService', (s) => {
73
- if (s.canWrite(c)) {
74
- s.write(indentedTextWriter, c, options, designItemsAssignmentList);
75
- }
76
- });
77
- }
78
- indentedTextWriter.levelShrink();
79
- indentedTextWriter.writeIndent();
80
25
  }
81
26
  }
82
- else if (designItem.hasContent) {
83
- indentedTextWriter.write(DomConverter.normalizeContentValue(designItem.content));
84
- }
85
- if (!DomConverter.IsSelfClosingElement(designItem.name))
86
- indentedTextWriter.write('</' + designItem.name + '>');
87
- this._conditionalyWriteNewline(indentedTextWriter, designItem);
88
27
  }
89
- if (designItemsAssignmentList) {
90
- designItemsAssignmentList.set(designItem, { start: start, length: indentedTextWriter.position - start - 1 });
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('"');
91
41
  }
92
42
  }
93
- writeTextNode(indentedTextWriter, designItem, indentAndNewline) {
43
+ _writeTextNode(writeContext, designItem) {
44
+ writeContext.lastElementDisplayType = ElementDisplayType.inline;
94
45
  let content = DomConverter.normalizeContentValue(designItem.content).trim();
95
46
  if (content) {
96
- if (indentAndNewline)
97
- this._conditionalyWriteIndent(indentedTextWriter, designItem);
98
- indentedTextWriter.write(content);
99
- if (indentAndNewline)
100
- this._conditionalyWriteNewline(indentedTextWriter, designItem);
47
+ writeContext.indentedTextWriter.write(content);
101
48
  }
102
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
+ }
103
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, designItem: IDesignItem, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
9
+ write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
10
+ private internalWrite;
11
11
  private writeTextNode;
12
12
  }