@node-projects/web-component-designer 0.0.80 → 0.0.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements/helper/PathDataPolyfill.d.ts +11 -10
- package/dist/elements/helper/PathDataPolyfill.js +35 -0
- package/dist/elements/services/DefaultServiceBootstrap.js +12 -5
- package/dist/elements/services/htmlWriterService/AbstractHtmlWriterService.d.ts +10 -0
- package/dist/elements/services/htmlWriterService/AbstractHtmlWriterService.js +62 -0
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.d.ts +5 -5
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +4 -4
- package/dist/elements/services/htmlWriterService/HtmlWriterService copy.d.ts +12 -0
- package/dist/elements/services/htmlWriterService/HtmlWriterService copy.js +118 -0
- package/dist/elements/services/htmlWriterService/HtmlWriterService.d.ts +6 -6
- package/dist/elements/services/htmlWriterService/HtmlWriterService.js +6 -33
- package/dist/elements/services/htmlWriterService/IHtmlWriterOptions.d.ts +2 -0
- package/dist/elements/services/htmlWriterService/IHtmlWriterOptions.js +5 -3
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +3 -1
- package/dist/elements/widgets/codeView/code-view-code-mirror.js +1 -1
- package/dist/elements/widgets/designerView/DomConverter.d.ts +3 -3
- package/dist/elements/widgets/designerView/DomConverter.js +7 -4
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -0
- package/dist/elements/widgets/designerView/designerCanvas.js +20 -8
- package/dist/elements/widgets/designerView/designerView.js +25 -7
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.d.ts +14 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +38 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider.js +13 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +5 -4
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +41 -15
- package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/IframeExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/IframeExtension.js +46 -0
- package/dist/elements/widgets/designerView/extensions/IframeExtensionProvider.d.ts +9 -0
- package/dist/elements/widgets/designerView/extensions/IframeExtensionProvider.js +9 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.js +2 -2
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.js +3 -3
- package/dist/elements/widgets/designerView/extensions/PathExtension.d.ts +1 -2
- package/dist/elements/widgets/designerView/extensions/PathExtension.js +117 -44
- package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension copy.d.ts +13 -0
- package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension copy.js +21 -0
- package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtensionProvider copy.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtensionProvider copy.js +13 -0
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +11 -3
- package/dist/elements/widgets/designerView/extensions/ResizeExtensionProvider.js +2 -1
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +13 -12
- package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.js +0 -1
- package/dist/elements/widgets/designerView/extensions/contextMenu/PathContextMenu.d.ts +8 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/PathContextMenu.js +31 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/RectContextMenu.d.ts +8 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/RectContextMenu.js +34 -0
- package/dist/elements/widgets/designerView/tools/DrawElementTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawElementTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawLineTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +6 -1
- package/dist/elements/widgets/designerView/tools/DrawRectTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/ITool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/PanTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/PanTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/PickColorTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/PickColorTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/TextTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/TextTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/ZoomTool.d.ts +1 -0
- package/dist/elements/widgets/designerView/tools/ZoomTool.js +1 -0
- package/dist/elements/widgets/treeView/treeViewExtended.js +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +5 -2
- package/package.json +9 -9
|
@@ -1,42 +1,42 @@
|
|
|
1
1
|
import { IPoint } from "../../interfaces/IPoint.js";
|
|
2
2
|
export {};
|
|
3
|
-
declare type PathDataM = {
|
|
3
|
+
export declare type PathDataM = {
|
|
4
4
|
type: 'M' | 'm';
|
|
5
5
|
values: [x: number, y: number];
|
|
6
6
|
};
|
|
7
|
-
declare type PathDataL = {
|
|
7
|
+
export declare type PathDataL = {
|
|
8
8
|
type: 'L' | 'l';
|
|
9
9
|
values: [x: number, y: number];
|
|
10
10
|
};
|
|
11
|
-
declare type PathDataT = {
|
|
11
|
+
export declare type PathDataT = {
|
|
12
12
|
type: 'T' | 't';
|
|
13
13
|
values: [x: number, y: number];
|
|
14
14
|
};
|
|
15
|
-
declare type PathDataH = {
|
|
15
|
+
export declare type PathDataH = {
|
|
16
16
|
type: 'H' | 'h';
|
|
17
17
|
values: [x: number];
|
|
18
18
|
};
|
|
19
|
-
declare type PathDataV = {
|
|
19
|
+
export declare type PathDataV = {
|
|
20
20
|
type: 'V' | 'v';
|
|
21
21
|
values: [y: number];
|
|
22
22
|
};
|
|
23
|
-
declare type PathDataZ = {
|
|
23
|
+
export declare type PathDataZ = {
|
|
24
24
|
type: 'Z' | 'z';
|
|
25
25
|
values?: [];
|
|
26
26
|
};
|
|
27
|
-
declare type PathDataC = {
|
|
27
|
+
export declare type PathDataC = {
|
|
28
28
|
type: 'C' | 'c';
|
|
29
29
|
values: [x1: number, y1: number, x2: number, y2: number, x: number, y: number];
|
|
30
30
|
};
|
|
31
|
-
declare type PathDataS = {
|
|
31
|
+
export declare type PathDataS = {
|
|
32
32
|
type: 'S' | 's';
|
|
33
33
|
values: [x2: number, y2: number, x: number, y: number];
|
|
34
34
|
};
|
|
35
|
-
declare type PathDataQ = {
|
|
35
|
+
export declare type PathDataQ = {
|
|
36
36
|
type: 'Q' | 'q';
|
|
37
37
|
values: [x1: number, y1: number, x: number, y: number];
|
|
38
38
|
};
|
|
39
|
-
declare type PathDataA = {
|
|
39
|
+
export declare type PathDataA = {
|
|
40
40
|
type: 'A' | 'a';
|
|
41
41
|
values: [rx: number, ry: number, ang: number, flag1: 0 | 1, flag2: 0 | 1, x: number, y: number];
|
|
42
42
|
};
|
|
@@ -47,6 +47,7 @@ export declare function straightenLine(p1: IPoint, p2: IPoint): IPoint;
|
|
|
47
47
|
export declare function calculateNormLegth(p1: IPoint, p2: IPoint): number;
|
|
48
48
|
export declare function calculateAlpha(p1: IPoint, p2: IPoint): number;
|
|
49
49
|
export declare function moveSVGPath(path: SVGPathElement, xFactor: number, yFactor: number): string;
|
|
50
|
+
export declare function createPathD(path: PathData[]): string;
|
|
50
51
|
declare global {
|
|
51
52
|
interface SVGGraphicsElement {
|
|
52
53
|
getPathData(options?: {
|
|
@@ -941,3 +941,38 @@ export function moveSVGPath(path, xFactor, yFactor) {
|
|
|
941
941
|
}
|
|
942
942
|
return newPathData;
|
|
943
943
|
}
|
|
944
|
+
export function createPathD(path) {
|
|
945
|
+
let pathD = "";
|
|
946
|
+
for (let p of path) {
|
|
947
|
+
switch (p.type) {
|
|
948
|
+
case 'M':
|
|
949
|
+
pathD += p.type + p.values[0] + " " + p.values[1];
|
|
950
|
+
break;
|
|
951
|
+
case 'L':
|
|
952
|
+
pathD += p.type + p.values[0] + " " + p.values[1];
|
|
953
|
+
break;
|
|
954
|
+
case 'H':
|
|
955
|
+
break;
|
|
956
|
+
case 'V':
|
|
957
|
+
break;
|
|
958
|
+
case 'Z':
|
|
959
|
+
pathD += p.type;
|
|
960
|
+
break;
|
|
961
|
+
case 'C':
|
|
962
|
+
case 'c':
|
|
963
|
+
pathD += p.type + p.values[0] + " " + p.values[1] + " " + p.values[2] + " " + p.values[3] + " " + p.values[4] + " " + p.values[5];
|
|
964
|
+
break;
|
|
965
|
+
case 'S':
|
|
966
|
+
break;
|
|
967
|
+
case 'Q':
|
|
968
|
+
case 'q':
|
|
969
|
+
pathD += p.type + p.values[0] + " " + p.values[1] + " " + p.values[2] + " " + p.values[3];
|
|
970
|
+
break;
|
|
971
|
+
case 'T':
|
|
972
|
+
break;
|
|
973
|
+
case 'A':
|
|
974
|
+
break;
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
return pathD;
|
|
978
|
+
}
|
|
@@ -9,7 +9,7 @@ import { DefaultPlacementService } from './placementService/DefaultPlacementServ
|
|
|
9
9
|
import { DefaultHtmlParserService } from './htmlParserService/DefaultHtmlParserService.js';
|
|
10
10
|
import { Lit2PropertiesService } from './propertiesService/services/Lit2PropertiesService.js';
|
|
11
11
|
import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType.js';
|
|
12
|
-
import {
|
|
12
|
+
import { ElementDragTitleExtensionProvider } from '../widgets/designerView/extensions/ElementDragTitleExtensionProvider.js';
|
|
13
13
|
import { GridExtensionProvider } from '../widgets/designerView/extensions/GridExtensionProvider.js';
|
|
14
14
|
import { TransformOriginExtensionProvider } from '../widgets/designerView/extensions/TransformOriginExtensionProvider.js';
|
|
15
15
|
import { CanvasExtensionProvider } from '../widgets/designerView/extensions/CanvasExtensionProvider.js';
|
|
@@ -52,6 +52,9 @@ import { DrawRectTool } from '../widgets/designerView/tools/DrawRectTool.js';
|
|
|
52
52
|
import { DrawEllipsisTool } from '../widgets/designerView/tools/DrawEllipsisTool.js';
|
|
53
53
|
import { DrawLineTool } from '../widgets/designerView/tools/DrawLineTool.js';
|
|
54
54
|
import { HtmlWriterService } from './htmlWriterService/HtmlWriterService.js';
|
|
55
|
+
import { RectContextMenu } from '../widgets/designerView/extensions/contextMenu/RectContextMenu.js';
|
|
56
|
+
import { PathContextMenu } from '../widgets/designerView/extensions/contextMenu/PathContextMenu.js';
|
|
57
|
+
import { IframeExtensionProvider } from '../widgets/designerView/extensions/IframeExtensionProvider.js';
|
|
55
58
|
export function createDefaultServiceContainer() {
|
|
56
59
|
let serviceContainer = new ServiceContainer();
|
|
57
60
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -74,11 +77,13 @@ export function createDefaultServiceContainer() {
|
|
|
74
77
|
serviceContainer.register("modelCommandService", new DefaultModelCommandService());
|
|
75
78
|
serviceContainer.register("demoProviderService", new DemoProviderService());
|
|
76
79
|
serviceContainer.designerExtensions.set(ExtensionType.Permanent, [
|
|
77
|
-
new ResizeExtensionProvider(false),
|
|
78
|
-
new InvisibleDivExtensionProvider()
|
|
80
|
+
// new ResizeExtensionProvider(false),
|
|
81
|
+
new InvisibleDivExtensionProvider(),
|
|
82
|
+
new IframeExtensionProvider(),
|
|
83
|
+
// new ElementDragTitleExtensionProvider(),
|
|
79
84
|
]);
|
|
80
85
|
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
|
|
81
|
-
new
|
|
86
|
+
new ElementDragTitleExtensionProvider(),
|
|
82
87
|
new GridExtensionProvider(),
|
|
83
88
|
new TransformOriginExtensionProvider(),
|
|
84
89
|
new CanvasExtensionProvider(),
|
|
@@ -125,7 +130,9 @@ export function createDefaultServiceContainer() {
|
|
|
125
130
|
new CopyPasteContextMenu(),
|
|
126
131
|
new ZMoveContextMenu(),
|
|
127
132
|
new MultipleItemsSelectedContextMenu(),
|
|
128
|
-
new
|
|
133
|
+
new PathContextMenu(),
|
|
134
|
+
new RectContextMenu(),
|
|
135
|
+
new ItemsBelowContextMenu(),
|
|
129
136
|
];
|
|
130
137
|
return serviceContainer;
|
|
131
138
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IDesignItem } from '../../item/IDesignItem.js';
|
|
2
|
+
import { IHtmlWriterService } from './IHtmlWriterService.js';
|
|
3
|
+
import { IHtmlWriterOptions } from './IHtmlWriterOptions.js';
|
|
4
|
+
import { IndentedTextWriter } from '../../helper/IndentedTextWriter.js';
|
|
5
|
+
import { IStringPosition } from './IStringPosition.js';
|
|
6
|
+
export declare abstract class AbstractHtmlWriterService implements IHtmlWriterService {
|
|
7
|
+
abstract write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): any;
|
|
8
|
+
writeAttributes(indentedTextWriter: IndentedTextWriter, designItem: IDesignItem, options: IHtmlWriterOptions): void;
|
|
9
|
+
writeStyles(indentedTextWriter: IndentedTextWriter, designItem: IDesignItem, options: IHtmlWriterOptions): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { DomConverter } from '../../widgets/designerView/DomConverter.js';
|
|
2
|
+
import { CssCombiner } from '../../helper/CssCombiner.js';
|
|
3
|
+
import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper.js';
|
|
4
|
+
export class AbstractHtmlWriterService {
|
|
5
|
+
writeAttributes(indentedTextWriter, designItem, options) {
|
|
6
|
+
if (designItem.hasAttributes) {
|
|
7
|
+
for (const a of designItem.attributes) {
|
|
8
|
+
indentedTextWriter.write(' ');
|
|
9
|
+
if (typeof a[1] === 'string') {
|
|
10
|
+
if (a[1] === "")
|
|
11
|
+
indentedTextWriter.write(a[0]);
|
|
12
|
+
else {
|
|
13
|
+
if (options.parseJsonInAttributes &&
|
|
14
|
+
((a[1].startsWith('{') && !a[1].startsWith('{{') && a[1].endsWith('}')) ||
|
|
15
|
+
(a[1].startsWith('[') && !a[1].startsWith('[[') && a[1].endsWith(']')))) {
|
|
16
|
+
try {
|
|
17
|
+
let j = JSON.parse(a[1]);
|
|
18
|
+
let txt;
|
|
19
|
+
if (options.jsonWriteMode == 'beauty')
|
|
20
|
+
txt = JSON.stringify(j, null, 2);
|
|
21
|
+
else
|
|
22
|
+
txt = JSON.stringify(j);
|
|
23
|
+
indentedTextWriter.write(a[0] + '=\'' + DomConverter.normalizeAttributeValue(txt, true) + '\'');
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
catch { }
|
|
27
|
+
}
|
|
28
|
+
const content = DomConverter.normalizeAttributeValue(a[1]);
|
|
29
|
+
if (content.indexOf('"')) {
|
|
30
|
+
const contentSingle = DomConverter.normalizeAttributeValue(a[1], true);
|
|
31
|
+
if (contentSingle.length < content.length)
|
|
32
|
+
indentedTextWriter.write(a[0] + '=\'' + contentSingle + '\'');
|
|
33
|
+
else
|
|
34
|
+
indentedTextWriter.write(a[0] + '="' + content + '"');
|
|
35
|
+
}
|
|
36
|
+
else
|
|
37
|
+
indentedTextWriter.write(a[0] + '="' + content + '"');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else if (!a[1])
|
|
41
|
+
indentedTextWriter.write(a[0]);
|
|
42
|
+
else {
|
|
43
|
+
//TODO: writing of bindings, really ???
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
writeStyles(indentedTextWriter, designItem, options) {
|
|
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
|
+
}
|
|
62
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
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';
|
|
1
|
+
import { IDesignItem } from '../../item/IDesignItem.js';
|
|
2
|
+
import { IHtmlWriterService } from './IHtmlWriterService.js';
|
|
3
|
+
import { IHtmlWriterOptions } from './IHtmlWriterOptions.js';
|
|
4
|
+
import { IndentedTextWriter } from '../../helper/IndentedTextWriter.js';
|
|
5
|
+
import { IStringPosition } from './IStringPosition.js';
|
|
6
6
|
declare enum ElementContainerType {
|
|
7
7
|
block = 0,
|
|
8
8
|
complex = 1
|
|
@@ -1,7 +1,7 @@
|
|
|
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';
|
|
1
|
+
import { DomConverter } from '../../widgets/designerView/DomConverter.js';
|
|
2
|
+
import { CssCombiner } from '../../helper/CssCombiner.js';
|
|
3
|
+
import { NodeType } from '../../item/NodeType.js';
|
|
4
|
+
import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper.js';
|
|
5
5
|
import { ElementDisplayType, getElementDisplaytype } from '../../helper/ElementHelper.js';
|
|
6
6
|
var ElementContainerType;
|
|
7
7
|
(function (ElementContainerType) {
|
|
@@ -0,0 +1,12 @@
|
|
|
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 HtmlWriterService implements IHtmlWriterService {
|
|
7
|
+
private _conditionalyWriteIndent;
|
|
8
|
+
private _conditionalyWriteNewline;
|
|
9
|
+
write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
|
|
10
|
+
private internalWrite;
|
|
11
|
+
private writeTextNode;
|
|
12
|
+
}
|
|
@@ -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 { isEmptyTextNode, isInline } from '../../helper/ElementHelper.js';
|
|
6
|
+
export class HtmlWriterService {
|
|
7
|
+
_conditionalyWriteIndent(indentedTextWriter, designItem) {
|
|
8
|
+
if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
|
|
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))))
|
|
11
|
+
indentedTextWriter.writeIndent();
|
|
12
|
+
}
|
|
13
|
+
_conditionalyWriteNewline(indentedTextWriter, designItem) {
|
|
14
|
+
if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
|
|
15
|
+
(designItem.element.nextElementSibling instanceof HTMLElement && !isInline(designItem.element.nextElementSibling)))
|
|
16
|
+
indentedTextWriter.writeNewline();
|
|
17
|
+
}
|
|
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) {
|
|
24
|
+
let start = indentedTextWriter.position;
|
|
25
|
+
if (designItem.nodeType == NodeType.TextNode) {
|
|
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);
|
|
32
|
+
}
|
|
33
|
+
else if (designItem.nodeType == NodeType.Comment) {
|
|
34
|
+
this._conditionalyWriteIndent(indentedTextWriter, designItem);
|
|
35
|
+
indentedTextWriter.write('<!--' + designItem.content + '-->');
|
|
36
|
+
this._conditionalyWriteNewline(indentedTextWriter, designItem);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this._conditionalyWriteIndent(indentedTextWriter, designItem);
|
|
40
|
+
indentedTextWriter.write('<' + designItem.name);
|
|
41
|
+
if (designItem.hasAttributes) {
|
|
42
|
+
for (const a of designItem.attributes) {
|
|
43
|
+
indentedTextWriter.write(' ');
|
|
44
|
+
if (typeof a[1] === 'string') {
|
|
45
|
+
if (a[1] === "")
|
|
46
|
+
indentedTextWriter.write(a[0]);
|
|
47
|
+
else
|
|
48
|
+
indentedTextWriter.write(a[0] + '="' + DomConverter.normalizeAttributeValue(a[1]) + '"');
|
|
49
|
+
}
|
|
50
|
+
else if (!a[1])
|
|
51
|
+
indentedTextWriter.write(a[0]);
|
|
52
|
+
else {
|
|
53
|
+
//TODO: writing of bindings
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (designItem.hasStyles) {
|
|
58
|
+
indentedTextWriter.write(' style="');
|
|
59
|
+
let styles = designItem.styles;
|
|
60
|
+
if (options.compressCssToShorthandProperties)
|
|
61
|
+
styles = CssCombiner.combine(styles);
|
|
62
|
+
for (const s of styles) {
|
|
63
|
+
if (s[0]) {
|
|
64
|
+
indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
indentedTextWriter.write('"');
|
|
68
|
+
}
|
|
69
|
+
indentedTextWriter.write('>');
|
|
70
|
+
let contentSingleTextNode = false;
|
|
71
|
+
if (designItem.hasChildren) {
|
|
72
|
+
const children = designItem.children();
|
|
73
|
+
contentSingleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
|
|
74
|
+
if (contentSingleTextNode) {
|
|
75
|
+
this.writeTextNode(indentedTextWriter, designItem, false);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
if (designItem.element instanceof HTMLElement && !isInline(designItem.element)) {
|
|
79
|
+
indentedTextWriter.writeNewline();
|
|
80
|
+
indentedTextWriter.levelRaise();
|
|
81
|
+
}
|
|
82
|
+
for (const c of children) {
|
|
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();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (designItem.hasContent) {
|
|
97
|
+
indentedTextWriter.write(DomConverter.normalizeContentValue(designItem.content));
|
|
98
|
+
}
|
|
99
|
+
if (!DomConverter.IsSelfClosingElement(designItem.name))
|
|
100
|
+
indentedTextWriter.write('</' + designItem.name + '>');
|
|
101
|
+
if (!contentSingleTextNode)
|
|
102
|
+
this._conditionalyWriteNewline(indentedTextWriter, designItem);
|
|
103
|
+
}
|
|
104
|
+
if (designItemsAssignmentList) {
|
|
105
|
+
designItemsAssignmentList.set(designItem, { start: start, length: indentedTextWriter.position - start - 1 });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
writeTextNode(indentedTextWriter, designItem, indentAndNewline) {
|
|
109
|
+
let content = DomConverter.normalizeContentValue(designItem.content).trim();
|
|
110
|
+
if (content) {
|
|
111
|
+
if (indentAndNewline)
|
|
112
|
+
this._conditionalyWriteIndent(indentedTextWriter, designItem);
|
|
113
|
+
indentedTextWriter.write(content);
|
|
114
|
+
if (indentAndNewline)
|
|
115
|
+
this._conditionalyWriteNewline(indentedTextWriter, designItem);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { IDesignItem } from '../../item/IDesignItem';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
export declare class HtmlWriterService
|
|
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
|
+
import { AbstractHtmlWriterService } from './AbstractHtmlWriterService.js';
|
|
6
|
+
export declare class HtmlWriterService extends AbstractHtmlWriterService {
|
|
7
7
|
private _conditionalyWriteIndent;
|
|
8
8
|
private _conditionalyWriteNewline;
|
|
9
9
|
write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { DomConverter } from '../../widgets/designerView/DomConverter';
|
|
2
|
-
import {
|
|
3
|
-
import { NodeType } from '../../item/NodeType';
|
|
4
|
-
import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper';
|
|
1
|
+
import { DomConverter } from '../../widgets/designerView/DomConverter.js';
|
|
2
|
+
import { NodeType } from '../../item/NodeType.js';
|
|
5
3
|
import { isEmptyTextNode, isInline } from '../../helper/ElementHelper.js';
|
|
6
|
-
|
|
4
|
+
import { AbstractHtmlWriterService } from './AbstractHtmlWriterService.js';
|
|
5
|
+
export class HtmlWriterService extends AbstractHtmlWriterService {
|
|
7
6
|
_conditionalyWriteIndent(indentedTextWriter, designItem) {
|
|
8
7
|
if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
|
|
9
8
|
(designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling)) ||
|
|
@@ -38,34 +37,8 @@ export class HtmlWriterService {
|
|
|
38
37
|
else {
|
|
39
38
|
this._conditionalyWriteIndent(indentedTextWriter, designItem);
|
|
40
39
|
indentedTextWriter.write('<' + designItem.name);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
indentedTextWriter.write(' ');
|
|
44
|
-
if (typeof a[1] === 'string') {
|
|
45
|
-
if (a[1] === "")
|
|
46
|
-
indentedTextWriter.write(a[0]);
|
|
47
|
-
else
|
|
48
|
-
indentedTextWriter.write(a[0] + '="' + DomConverter.normalizeAttributeValue(a[1]) + '"');
|
|
49
|
-
}
|
|
50
|
-
else if (!a[1])
|
|
51
|
-
indentedTextWriter.write(a[0]);
|
|
52
|
-
else {
|
|
53
|
-
//TODO: writing of bindings
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (designItem.hasStyles) {
|
|
58
|
-
indentedTextWriter.write(' style="');
|
|
59
|
-
let styles = designItem.styles;
|
|
60
|
-
if (options.compressCssToShorthandProperties)
|
|
61
|
-
styles = CssCombiner.combine(styles);
|
|
62
|
-
for (const s of styles) {
|
|
63
|
-
if (s[0]) {
|
|
64
|
-
indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
indentedTextWriter.write('"');
|
|
68
|
-
}
|
|
40
|
+
this.writeAttributes(indentedTextWriter, designItem, options);
|
|
41
|
+
this.writeStyles(indentedTextWriter, designItem, options);
|
|
69
42
|
indentedTextWriter.write('>');
|
|
70
43
|
let contentSingleTextNode = false;
|
|
71
44
|
if (designItem.hasChildren) {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export class IHtmlWriterOptions {
|
|
2
|
-
beautifyOutput;
|
|
3
|
-
compressCssToShorthandProperties;
|
|
4
|
-
writeDesignerProperties;
|
|
2
|
+
beautifyOutput = true;
|
|
3
|
+
compressCssToShorthandProperties = true;
|
|
4
|
+
writeDesignerProperties = true;
|
|
5
|
+
parseJsonInAttributes = true;
|
|
6
|
+
jsonWriteMode = 'min';
|
|
5
7
|
}
|
|
@@ -78,7 +78,9 @@ export class WebcomponentManifestParserService extends UnkownElementPropertiesSe
|
|
|
78
78
|
return new Promise((resolve, reject) => { this._resolveStored.push(resolve); this._rejectStored.push(reject); });
|
|
79
79
|
}
|
|
80
80
|
isHandledElement(designItem) {
|
|
81
|
-
|
|
81
|
+
if (this._elementList)
|
|
82
|
+
return this._elementList.find(x => x.tag == designItem.name) != null;
|
|
83
|
+
return false;
|
|
82
84
|
}
|
|
83
85
|
getProperties(designItem) {
|
|
84
86
|
return this._propertiesList[designItem.name];
|
|
@@ -20,7 +20,7 @@ export class CodeViewCodeMirror extends BaseCustomWebComponentLazyAppend {
|
|
|
20
20
|
constructor() {
|
|
21
21
|
super();
|
|
22
22
|
//@ts-ignore
|
|
23
|
-
import("codemirror/lib/codemirror.css", { assert: { type: 'css' } }).then(x => this.shadowRoot.adoptedStyleSheets = [x.default, this.constructor.style]);
|
|
23
|
+
import("./codemirror/lib/codemirror.css", { assert: { type: 'css' } }).then(x => this.shadowRoot.adoptedStyleSheets = [x.default, this.constructor.style]);
|
|
24
24
|
this.style.display = 'block';
|
|
25
25
|
this._editor = this._getDomElement('textarea');
|
|
26
26
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { IDesignItem } from "../../item/IDesignItem";
|
|
2
|
-
import { IStringPosition } from "../../services/htmlWriterService/IStringPosition";
|
|
1
|
+
import { IDesignItem } from "../../item/IDesignItem.js";
|
|
2
|
+
import { IStringPosition } from "../../services/htmlWriterService/IStringPosition.js";
|
|
3
3
|
export declare class DomConverter {
|
|
4
|
-
static normalizeAttributeValue(value: string | number): string;
|
|
4
|
+
static normalizeAttributeValue(value: string | number, useSingleQuotes?: boolean): string;
|
|
5
5
|
static normalizeContentValue(value: string): string;
|
|
6
6
|
static IsSelfClosingElement(tag: string): boolean;
|
|
7
7
|
static ConvertToString(designItems: IDesignItem[], designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): string;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { IndentedTextWriter } from "../../helper/IndentedTextWriter";
|
|
1
|
+
import { IndentedTextWriter } from "../../helper/IndentedTextWriter.js";
|
|
2
2
|
export class DomConverter {
|
|
3
|
-
static normalizeAttributeValue(value) {
|
|
3
|
+
static normalizeAttributeValue(value, useSingleQuotes = false) {
|
|
4
4
|
if (typeof value === 'number')
|
|
5
5
|
value = value.toString();
|
|
6
|
-
if (value)
|
|
6
|
+
if (value) {
|
|
7
|
+
if (useSingleQuotes)
|
|
8
|
+
return value.replaceAll('\'', ''');
|
|
7
9
|
return value.replaceAll('"', '"');
|
|
10
|
+
}
|
|
8
11
|
return value;
|
|
9
12
|
}
|
|
10
13
|
static normalizeContentValue(value) {
|
|
@@ -31,7 +34,7 @@ export class DomConverter {
|
|
|
31
34
|
}
|
|
32
35
|
static ConvertToString(designItems, designItemsAssignmentList) {
|
|
33
36
|
let itw = new IndentedTextWriter();
|
|
34
|
-
let options = { beautifyOutput: true, writeDesignerProperties: true, compressCssToShorthandProperties: true };
|
|
37
|
+
let options = { beautifyOutput: true, writeDesignerProperties: true, compressCssToShorthandProperties: true, parseJsonInAttributes: true, jsonWriteMode: 'beauty' };
|
|
35
38
|
designItems[0].serviceContainer.htmlWriterService.write(itw, designItems, true, options, designItemsAssignmentList);
|
|
36
39
|
return itw.getString();
|
|
37
40
|
}
|
|
@@ -53,6 +53,8 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
53
53
|
set designerWidth(value: string);
|
|
54
54
|
get designerHeight(): string;
|
|
55
55
|
set designerHeight(value: string);
|
|
56
|
+
get designerOffsetWidth(): number;
|
|
57
|
+
get designerOffsetHeight(): number;
|
|
56
58
|
set additionalStyle(value: CSSStyleSheet);
|
|
57
59
|
executeCommand(command: IUiCommand): Promise<void>;
|
|
58
60
|
canExecuteCommand(command: IUiCommand): boolean;
|
|
@@ -138,10 +138,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
138
138
|
this._canvas = this._getDomElement('node-projects-designer-canvas-canvas');
|
|
139
139
|
this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
|
|
140
140
|
this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
|
|
141
|
-
this.instanceServiceContainer = new InstanceServiceContainer(this);
|
|
142
|
-
this.instanceServiceContainer.register("undoService", new UndoService(this));
|
|
143
|
-
this.instanceServiceContainer.register("selectionService", new SelectionService);
|
|
144
|
-
this.extensionManager = new ExtensionManager(this);
|
|
145
141
|
this._onKeyDownBound = this.onKeyDown.bind(this);
|
|
146
142
|
this._onKeyUpBound = this.onKeyUp.bind(this);
|
|
147
143
|
this._onDblClickBound = this._onDblClick.bind(this);
|
|
@@ -163,6 +159,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
163
159
|
this._canvasContainer.style.height = value;
|
|
164
160
|
this.zoomFactorChanged();
|
|
165
161
|
}
|
|
162
|
+
get designerOffsetWidth() {
|
|
163
|
+
return this._canvasContainer.offsetWidth;
|
|
164
|
+
}
|
|
165
|
+
get designerOffsetHeight() {
|
|
166
|
+
return this._canvasContainer.offsetHeight;
|
|
167
|
+
}
|
|
166
168
|
set additionalStyle(value) {
|
|
167
169
|
if (value) {
|
|
168
170
|
for (let r of value.rules) {
|
|
@@ -301,8 +303,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
301
303
|
}
|
|
302
304
|
initialize(serviceContainer) {
|
|
303
305
|
this.serviceContainer = serviceContainer;
|
|
306
|
+
this.instanceServiceContainer = new InstanceServiceContainer(this);
|
|
307
|
+
this.instanceServiceContainer.register("undoService", new UndoService(this));
|
|
308
|
+
this.instanceServiceContainer.register("selectionService", new SelectionService);
|
|
304
309
|
this.rootDesignItem = DesignItem.GetOrCreateDesignItem(this._canvas, this.serviceContainer, this.instanceServiceContainer);
|
|
305
310
|
this.instanceServiceContainer.register("contentService", new ContentService(this.rootDesignItem));
|
|
311
|
+
this.extensionManager = new ExtensionManager(this);
|
|
306
312
|
this.overlayLayer = new OverlayLayerView(serviceContainer);
|
|
307
313
|
this.overlayLayer.style.pointerEvents = 'none';
|
|
308
314
|
this._canvasContainer.appendChild(this.overlayLayer);
|
|
@@ -358,6 +364,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
358
364
|
this.snapLines.clearSnaplines();
|
|
359
365
|
}
|
|
360
366
|
setDesignItems(designItems) {
|
|
367
|
+
this._fillCalculationrects();
|
|
361
368
|
this.instanceServiceContainer.undoService.clear();
|
|
362
369
|
this.overlayLayer.removeAllOverlays();
|
|
363
370
|
DomHelper.removeAllChildnodes(this.overlayLayer);
|
|
@@ -625,7 +632,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
625
632
|
return currentElement;
|
|
626
633
|
}
|
|
627
634
|
_rect;
|
|
628
|
-
_pointerEventHandler(event) {
|
|
635
|
+
_pointerEventHandler(event, forceElement = null) {
|
|
629
636
|
this._fillCalculationrects();
|
|
630
637
|
if (this._pointerextensions) {
|
|
631
638
|
for (let pe of this._pointerextensions)
|
|
@@ -635,9 +642,14 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
635
642
|
return;
|
|
636
643
|
if (event.buttons == 2)
|
|
637
644
|
return;
|
|
638
|
-
let currentElement
|
|
639
|
-
if (
|
|
640
|
-
currentElement =
|
|
645
|
+
let currentElement;
|
|
646
|
+
if (forceElement)
|
|
647
|
+
currentElement = forceElement;
|
|
648
|
+
else {
|
|
649
|
+
currentElement = this.serviceContainer.elementAtPointService.getElementAtPoint(this, { x: event.x, y: event.y });
|
|
650
|
+
if (currentElement === this._outercanvas2 || currentElement === this.overlayLayer || !currentElement) {
|
|
651
|
+
currentElement = this._canvas;
|
|
652
|
+
}
|
|
641
653
|
} /* else {
|
|
642
654
|
if (!DesignerCanvas.hasOrIsParent(currentElement, this._canvas))
|
|
643
655
|
return;
|