@node-projects/web-component-designer 0.0.26 → 0.0.30
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/controls/DesignerTabControl.d.ts +5 -1
- package/dist/elements/controls/DesignerTabControl.js +85 -8
- package/dist/elements/helper/CssCombiner.d.ts +1 -2
- package/dist/elements/item/Binding.d.ts +14 -0
- package/dist/elements/item/Binding.js +4 -0
- package/dist/elements/item/BindingMode.d.ts +4 -0
- package/dist/elements/item/BindingMode.js +5 -0
- package/dist/elements/item/BindingTarget.d.ts +8 -0
- package/dist/elements/item/BindingTarget.js +9 -0
- package/dist/elements/item/DesignItem.d.ts +4 -7
- package/dist/elements/item/DesignItem.js +0 -15
- package/dist/elements/item/IBinding copy.d.ts +14 -0
- package/dist/elements/item/IBinding copy.js +1 -0
- package/dist/elements/item/IBinding.d.ts +15 -0
- package/dist/elements/item/IBinding.js +1 -0
- package/dist/elements/item/IDesignItem.d.ts +4 -5
- package/dist/elements/services/DefaultServiceBootstrap.js +0 -3
- package/dist/elements/services/GlobalContext.d.ts +3 -0
- package/dist/elements/services/GlobalContext.js +4 -1
- package/dist/elements/services/ServiceContainer.js +1 -1
- package/dist/elements/services/bindingsService/BaseCustomWebcomponentBindingsService.d.ts +8 -0
- package/dist/elements/services/bindingsService/BaseCustomWebcomponentBindingsService.js +69 -0
- package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.d.ts +1 -1
- package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.js +1 -1
- package/dist/elements/services/bindingsService/IBindingService.d.ts +3 -6
- package/dist/elements/services/bindingsService/SpecialTagsBindingService.d.ts +14 -0
- package/dist/elements/services/bindingsService/SpecialTagsBindingService.js +40 -0
- package/dist/elements/services/bindingsService/VueBindingsService.d.ts +0 -0
- package/dist/elements/services/bindingsService/VueBindingsService.js +7 -0
- package/dist/elements/services/elementAtPointService/ElementAtPointService.d.ts +2 -2
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.d.ts +2 -0
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.js +5 -21
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.d.ts +9 -0
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.js +100 -0
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.d.ts +11 -0
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.js +84 -0
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.d.ts +9 -0
- package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.js +83 -0
- package/dist/elements/services/propertiesService/services/CommonPropertiesService.d.ts +1 -1
- package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +1 -1
- package/dist/elements/services/propertiesService/services/CssPropertiesService.js +9 -1
- package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.d.ts +1 -1
- package/dist/elements/services/undoService/transactionItems/AttributeChangeAction.d.ts +1 -1
- package/dist/elements/widgets/designerView/designerCanvas.js +5 -1
- package/dist/elements/widgets/designerView/designerView.js +1 -0
- package/dist/elements/widgets/designerView/extensions/PositionExtension.js +12 -4
- package/dist/elements/widgets/designerView/tools/DrawElementTool.d.ts +2 -0
- package/dist/elements/widgets/designerView/tools/DrawElementTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +2 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/ITool.d.ts +2 -0
- package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.d.ts +2 -0
- package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/PanTool.d.ts +2 -0
- package/dist/elements/widgets/designerView/tools/PanTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/PickColorTool.d.ts +2 -0
- package/dist/elements/widgets/designerView/tools/PickColorTool.js +12 -16
- package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +2 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.d.ts +2 -0
- package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/TextTool.d.ts +2 -0
- package/dist/elements/widgets/designerView/tools/TextTool.js +2 -0
- package/dist/elements/widgets/designerView/tools/ZoomTool.d.ts +2 -0
- package/dist/elements/widgets/designerView/tools/ZoomTool.js +2 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +2 -0
- package/package.json +6 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IElementAtPointService } from './IElementAtPointService';
|
|
2
|
-
import {
|
|
2
|
+
import { IDesignerCanvas } from '../../..';
|
|
3
3
|
import { IPoint } from '../../../interfaces/IPoint';
|
|
4
4
|
export declare class ElementAtPointService implements IElementAtPointService {
|
|
5
|
-
getElementAtPoint(designerView:
|
|
5
|
+
getElementAtPoint(designerView: IDesignerCanvas, point: IPoint): any;
|
|
6
6
|
}
|
|
@@ -3,6 +3,8 @@ import { ServiceContainer } from "../ServiceContainer";
|
|
|
3
3
|
import { IHtmlParserService } from "./IHtmlParserService";
|
|
4
4
|
import { IDesignItem } from '../../item/IDesignItem';
|
|
5
5
|
export declare class NodeHtmlParserService implements IHtmlParserService {
|
|
6
|
+
private _parserUrl;
|
|
7
|
+
constructor(parserUrl?: string);
|
|
6
8
|
parse(html: string, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): Promise<IDesignItem[]>;
|
|
7
9
|
private _parseDiv;
|
|
8
10
|
_createDesignItemsRecursive(item: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, namespace: string): IDesignItem;
|
|
@@ -4,12 +4,13 @@ import { newElementFromString } from "../../helper/ElementHelper";
|
|
|
4
4
|
// Alternative Parser, cause when you use the Browser, it instanciates the CusomElements, and some Elemnts remove
|
|
5
5
|
// attributes from their DOM, so you loose Data
|
|
6
6
|
export class NodeHtmlParserService {
|
|
7
|
-
constructor() {
|
|
7
|
+
constructor(parserUrl = '../../../../../node-html-parser-esm/dist/index.js') {
|
|
8
8
|
this._parseDiv = document.createElement("div");
|
|
9
|
+
this._parserUrl = parserUrl;
|
|
9
10
|
}
|
|
10
11
|
async parse(html, serviceContainer, instanceServiceContainer) {
|
|
11
12
|
//@ts-ignore
|
|
12
|
-
let parser = await import(
|
|
13
|
+
let parser = await import(this._parserUrl);
|
|
13
14
|
const parsed = parser.parse(html, { comment: true });
|
|
14
15
|
let designItems = [];
|
|
15
16
|
for (let p of parsed.childNodes) {
|
|
@@ -40,14 +41,7 @@ export class NodeHtmlParserService {
|
|
|
40
41
|
let style = '';
|
|
41
42
|
let attr = item.attributes;
|
|
42
43
|
for (let a in attr) {
|
|
43
|
-
|
|
44
|
-
if (serviceContainer.bindingService) {
|
|
45
|
-
bnd = serviceContainer.bindingService.parseBindingAttribute(a, attr[a]);
|
|
46
|
-
}
|
|
47
|
-
if (bnd) {
|
|
48
|
-
designItem.setAttribute(a, bnd);
|
|
49
|
-
}
|
|
50
|
-
else if (a !== 'style') {
|
|
44
|
+
if (a !== 'style') {
|
|
51
45
|
designItem.setAttribute(a, attr[a]);
|
|
52
46
|
if (a === 'node-projects-hide-at-design-time')
|
|
53
47
|
hideAtDesignTime = true;
|
|
@@ -64,17 +58,7 @@ export class NodeHtmlParserService {
|
|
|
64
58
|
let styleParser = new CssAttributeParser();
|
|
65
59
|
styleParser.parse(style);
|
|
66
60
|
for (let s of styleParser.entries) {
|
|
67
|
-
|
|
68
|
-
if (serviceContainer.bindingService) {
|
|
69
|
-
bnd = serviceContainer.bindingService.parseBindingAttribute(s.name, s.value);
|
|
70
|
-
}
|
|
71
|
-
if (bnd) {
|
|
72
|
-
designItem.setStyle(s.name, bnd);
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
designItem.setStyle(s.name, s.value);
|
|
76
|
-
}
|
|
77
|
-
//designItem.styles.set(s.name, s.value);
|
|
61
|
+
designItem.setStyle(s.name, s.value);
|
|
78
62
|
}
|
|
79
63
|
}
|
|
80
64
|
designItem.hideAtDesignTime = hideAtDesignTime;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { InstanceServiceContainer } from "../InstanceServiceContainer";
|
|
2
|
+
import { ServiceContainer } from "../ServiceContainer";
|
|
3
|
+
import { IHtmlParserService } from "./IHtmlParserService";
|
|
4
|
+
import { IDesignItem } from '../../item/IDesignItem';
|
|
5
|
+
export declare class NodeHtmlParserService implements IHtmlParserService {
|
|
6
|
+
parse(html: string, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): Promise<IDesignItem[]>;
|
|
7
|
+
private _parseDiv;
|
|
8
|
+
_createDesignItemsRecursive(item: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, namespace: string): IDesignItem;
|
|
9
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { DesignItem } from '../../item/DesignItem';
|
|
2
|
+
import { CssAttributeParser } from "../../helper/CssAttributeParser";
|
|
3
|
+
import { newElementFromString } from "../../helper/ElementHelper";
|
|
4
|
+
// Alternative Parser, cause when you use the Browser, it instanciates the CusomElements, and some Elemnts remove
|
|
5
|
+
// attributes from their DOM, so you loose Data
|
|
6
|
+
export class NodeHtmlParserService {
|
|
7
|
+
constructor() {
|
|
8
|
+
this._parseDiv = document.createElement("div");
|
|
9
|
+
}
|
|
10
|
+
async parse(html, serviceContainer, instanceServiceContainer) {
|
|
11
|
+
//@ts-ignore
|
|
12
|
+
let parser = await import('../../../../../node-html-parser-esm/dist/index.js');
|
|
13
|
+
const parsed = parser.parse(html, { comment: true });
|
|
14
|
+
let designItems = [];
|
|
15
|
+
for (let p of parsed.childNodes) {
|
|
16
|
+
let di = this._createDesignItemsRecursive(p, serviceContainer, instanceServiceContainer, null);
|
|
17
|
+
if (di != null)
|
|
18
|
+
designItems.push(di);
|
|
19
|
+
else
|
|
20
|
+
console.warn("NodeHtmlParserService - could not parse element", p);
|
|
21
|
+
}
|
|
22
|
+
return designItems;
|
|
23
|
+
}
|
|
24
|
+
_createDesignItemsRecursive(item, serviceContainer, instanceServiceContainer, namespace) {
|
|
25
|
+
let designItem = null;
|
|
26
|
+
if (item.nodeType == 1) {
|
|
27
|
+
let element;
|
|
28
|
+
if (!namespace)
|
|
29
|
+
element = newElementFromString('<' + item.rawTagName + ' ' + item.rawAttrs + '></' + item.rawTagName + '>'); // some custom elements only parse attributes during constructor call
|
|
30
|
+
if (!element) {
|
|
31
|
+
if (namespace)
|
|
32
|
+
element = document.createElementNS(namespace, item.rawTagName);
|
|
33
|
+
else
|
|
34
|
+
element = document.createElement(item.rawTagName);
|
|
35
|
+
}
|
|
36
|
+
designItem = new DesignItem(element, serviceContainer, instanceServiceContainer);
|
|
37
|
+
let hideAtDesignTime = false;
|
|
38
|
+
let hideAtRunTime = false;
|
|
39
|
+
let lockAtDesignTime = false;
|
|
40
|
+
let style = '';
|
|
41
|
+
let attr = item.attributes;
|
|
42
|
+
for (let a in attr) {
|
|
43
|
+
let bnd;
|
|
44
|
+
if (serviceContainer.bindingService) {
|
|
45
|
+
bnd = serviceContainer.bindingService.parseBindingAttribute(a, attr[a]);
|
|
46
|
+
}
|
|
47
|
+
if (bnd) {
|
|
48
|
+
designItem.setAttribute(a, bnd);
|
|
49
|
+
}
|
|
50
|
+
else if (a !== 'style') {
|
|
51
|
+
designItem.setAttribute(a, attr[a]);
|
|
52
|
+
if (a === 'node-projects-hide-at-design-time')
|
|
53
|
+
hideAtDesignTime = true;
|
|
54
|
+
else if (a === 'node-projects-hide-at-run-time')
|
|
55
|
+
hideAtRunTime = true;
|
|
56
|
+
else if (a === 'node-projects-lock-at-design-time')
|
|
57
|
+
lockAtDesignTime = true;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
style = attr[a];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if ((element instanceof HTMLElement || element instanceof SVGElement) && style) {
|
|
64
|
+
let styleParser = new CssAttributeParser();
|
|
65
|
+
styleParser.parse(style);
|
|
66
|
+
for (let s of styleParser.entries) {
|
|
67
|
+
let bnd;
|
|
68
|
+
if (serviceContainer.bindingService) {
|
|
69
|
+
bnd = serviceContainer.bindingService.parseBindingAttribute(s.name, s.value);
|
|
70
|
+
}
|
|
71
|
+
if (bnd) {
|
|
72
|
+
designItem.setStyle(s.name, bnd);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
designItem.setStyle(s.name, s.value);
|
|
76
|
+
}
|
|
77
|
+
//designItem.styles.set(s.name, s.value);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
designItem.hideAtDesignTime = hideAtDesignTime;
|
|
81
|
+
designItem.hideAtRunTime = hideAtRunTime;
|
|
82
|
+
designItem.lockAtDesignTime = lockAtDesignTime;
|
|
83
|
+
element.draggable = false; //even if it should be true, for better designer exp.
|
|
84
|
+
for (let c of item.childNodes) {
|
|
85
|
+
let di = this._createDesignItemsRecursive(c, serviceContainer, instanceServiceContainer, element instanceof SVGElement ? 'http://www.w3.org/2000/svg' : null);
|
|
86
|
+
designItem.insertChild(di);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else if (item.nodeType == 3) {
|
|
90
|
+
this._parseDiv.innerHTML = item.rawText;
|
|
91
|
+
let element = this._parseDiv.childNodes[0];
|
|
92
|
+
designItem = new DesignItem(element, serviceContainer, instanceServiceContainer);
|
|
93
|
+
}
|
|
94
|
+
else if (item.nodeType == 8) {
|
|
95
|
+
let element = document.createComment(item.rawText);
|
|
96
|
+
designItem = new DesignItem(element, serviceContainer, instanceServiceContainer);
|
|
97
|
+
}
|
|
98
|
+
return designItem;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { InstanceServiceContainer } from "../InstanceServiceContainer";
|
|
2
|
+
import { ServiceContainer } from "../ServiceContainer";
|
|
3
|
+
import { IHtmlParserService } from "./IHtmlParserService";
|
|
4
|
+
import { IDesignItem } from '../../item/IDesignItem';
|
|
5
|
+
export declare class NodeHtmlParserService implements IHtmlParserService {
|
|
6
|
+
private _parserUrl;
|
|
7
|
+
constructor(parserUrl?: string);
|
|
8
|
+
parse(html: string, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): Promise<IDesignItem[]>;
|
|
9
|
+
private _parseDiv;
|
|
10
|
+
_createDesignItemsRecursive(item: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, namespace: string): IDesignItem;
|
|
11
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { DesignItem } from '../../item/DesignItem';
|
|
2
|
+
import { CssAttributeParser } from "../../helper/CssAttributeParser";
|
|
3
|
+
import { newElementFromString } from "../../helper/ElementHelper";
|
|
4
|
+
// Alternative Parser, cause when you use the Browser, it instanciates the CusomElements, and some Elemnts remove
|
|
5
|
+
// attributes from their DOM, so you loose Data
|
|
6
|
+
export class NodeHtmlParserService {
|
|
7
|
+
constructor(parserUrl = '../../../../../node-html-parser-esm/dist/index.js') {
|
|
8
|
+
this._parseDiv = document.createElement("div");
|
|
9
|
+
this._parserUrl = parserUrl;
|
|
10
|
+
}
|
|
11
|
+
async parse(html, serviceContainer, instanceServiceContainer) {
|
|
12
|
+
//@ts-ignore
|
|
13
|
+
let parser = await import(this._parserUrl);
|
|
14
|
+
const parsed = parser.parse(html, { comment: true });
|
|
15
|
+
let designItems = [];
|
|
16
|
+
for (let p of parsed.childNodes) {
|
|
17
|
+
let di = this._createDesignItemsRecursive(p, serviceContainer, instanceServiceContainer, null);
|
|
18
|
+
if (di != null)
|
|
19
|
+
designItems.push(di);
|
|
20
|
+
else
|
|
21
|
+
console.warn("NodeHtmlParserService - could not parse element", p);
|
|
22
|
+
}
|
|
23
|
+
return designItems;
|
|
24
|
+
}
|
|
25
|
+
_createDesignItemsRecursive(item, serviceContainer, instanceServiceContainer, namespace) {
|
|
26
|
+
let designItem = null;
|
|
27
|
+
if (item.nodeType == 1) {
|
|
28
|
+
let element;
|
|
29
|
+
if (!namespace)
|
|
30
|
+
element = newElementFromString('<' + item.rawTagName + ' ' + item.rawAttrs + '></' + item.rawTagName + '>'); // some custom elements only parse attributes during constructor call
|
|
31
|
+
if (!element) {
|
|
32
|
+
if (namespace)
|
|
33
|
+
element = document.createElementNS(namespace, item.rawTagName);
|
|
34
|
+
else
|
|
35
|
+
element = document.createElement(item.rawTagName);
|
|
36
|
+
}
|
|
37
|
+
designItem = new DesignItem(element, serviceContainer, instanceServiceContainer);
|
|
38
|
+
let hideAtDesignTime = false;
|
|
39
|
+
let hideAtRunTime = false;
|
|
40
|
+
let lockAtDesignTime = false;
|
|
41
|
+
let style = '';
|
|
42
|
+
let attr = item.attributes;
|
|
43
|
+
for (let a in attr) {
|
|
44
|
+
if (a !== 'style') {
|
|
45
|
+
designItem.setAttribute(a, attr[a]);
|
|
46
|
+
if (a === 'node-projects-hide-at-design-time')
|
|
47
|
+
hideAtDesignTime = true;
|
|
48
|
+
else if (a === 'node-projects-hide-at-run-time')
|
|
49
|
+
hideAtRunTime = true;
|
|
50
|
+
else if (a === 'node-projects-lock-at-design-time')
|
|
51
|
+
lockAtDesignTime = true;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
style = attr[a];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if ((element instanceof HTMLElement || element instanceof SVGElement) && style) {
|
|
58
|
+
let styleParser = new CssAttributeParser();
|
|
59
|
+
styleParser.parse(style);
|
|
60
|
+
for (let s of styleParser.entries) {
|
|
61
|
+
designItem.setStyle(s.name, s.value);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
designItem.hideAtDesignTime = hideAtDesignTime;
|
|
65
|
+
designItem.hideAtRunTime = hideAtRunTime;
|
|
66
|
+
designItem.lockAtDesignTime = lockAtDesignTime;
|
|
67
|
+
element.draggable = false; //even if it should be true, for better designer exp.
|
|
68
|
+
for (let c of item.childNodes) {
|
|
69
|
+
let di = this._createDesignItemsRecursive(c, serviceContainer, instanceServiceContainer, element instanceof SVGElement ? 'http://www.w3.org/2000/svg' : null);
|
|
70
|
+
designItem.insertChild(di);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (item.nodeType == 3) {
|
|
74
|
+
this._parseDiv.innerHTML = item.rawText;
|
|
75
|
+
let element = this._parseDiv.childNodes[0];
|
|
76
|
+
designItem = new DesignItem(element, serviceContainer, instanceServiceContainer);
|
|
77
|
+
}
|
|
78
|
+
else if (item.nodeType == 8) {
|
|
79
|
+
let element = document.createComment(item.rawText);
|
|
80
|
+
designItem = new DesignItem(element, serviceContainer, instanceServiceContainer);
|
|
81
|
+
}
|
|
82
|
+
return designItem;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { InstanceServiceContainer } from "../InstanceServiceContainer";
|
|
2
|
+
import { ServiceContainer } from "../ServiceContainer";
|
|
3
|
+
import { IHtmlParserService } from "./IHtmlParserService";
|
|
4
|
+
import { IDesignItem } from '../../item/IDesignItem';
|
|
5
|
+
export declare class NodeHtmlParserService implements IHtmlParserService {
|
|
6
|
+
parse(html: string, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): Promise<IDesignItem[]>;
|
|
7
|
+
private _parseDiv;
|
|
8
|
+
_createDesignItemsRecursive(item: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, namespace: string): IDesignItem;
|
|
9
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { DesignItem } from '../../item/DesignItem';
|
|
2
|
+
import { CssAttributeParser } from "../../helper/CssAttributeParser";
|
|
3
|
+
import { newElementFromString } from "../../helper/ElementHelper";
|
|
4
|
+
// Alternative Parser, cause when you use the Browser, it instanciates the CusomElements, and some Elemnts remove
|
|
5
|
+
// attributes from their DOM, so you loose Data
|
|
6
|
+
export class NodeHtmlParserService {
|
|
7
|
+
constructor() {
|
|
8
|
+
this._parseDiv = document.createElement("div");
|
|
9
|
+
}
|
|
10
|
+
async parse(html, serviceContainer, instanceServiceContainer) {
|
|
11
|
+
//@ts-ignore
|
|
12
|
+
let parser = await import('../../../../../node-html-parser-esm/dist/index.js');
|
|
13
|
+
const parsed = parser.parse(html, { comment: true });
|
|
14
|
+
let designItems = [];
|
|
15
|
+
for (let p of parsed.childNodes) {
|
|
16
|
+
let di = this._createDesignItemsRecursive(p, serviceContainer, instanceServiceContainer, null);
|
|
17
|
+
if (di != null)
|
|
18
|
+
designItems.push(di);
|
|
19
|
+
else
|
|
20
|
+
console.warn("NodeHtmlParserService - could not parse element", p);
|
|
21
|
+
}
|
|
22
|
+
return designItems;
|
|
23
|
+
}
|
|
24
|
+
_createDesignItemsRecursive(item, serviceContainer, instanceServiceContainer, namespace) {
|
|
25
|
+
let designItem = null;
|
|
26
|
+
if (item.nodeType == 1) {
|
|
27
|
+
let element;
|
|
28
|
+
if (!namespace)
|
|
29
|
+
element = newElementFromString('<' + item.rawTagName + ' ' + item.rawAttrs + '></' + item.rawTagName + '>'); // some custom elements only parse attributes during constructor call
|
|
30
|
+
if (!element) {
|
|
31
|
+
if (namespace)
|
|
32
|
+
element = document.createElementNS(namespace, item.rawTagName);
|
|
33
|
+
else
|
|
34
|
+
element = document.createElement(item.rawTagName);
|
|
35
|
+
}
|
|
36
|
+
designItem = new DesignItem(element, serviceContainer, instanceServiceContainer);
|
|
37
|
+
let hideAtDesignTime = false;
|
|
38
|
+
let hideAtRunTime = false;
|
|
39
|
+
let lockAtDesignTime = false;
|
|
40
|
+
let style = '';
|
|
41
|
+
let attr = item.attributes;
|
|
42
|
+
for (let a in attr) {
|
|
43
|
+
if (a !== 'style') {
|
|
44
|
+
designItem.setAttribute(a, attr[a]);
|
|
45
|
+
if (a === 'node-projects-hide-at-design-time')
|
|
46
|
+
hideAtDesignTime = true;
|
|
47
|
+
else if (a === 'node-projects-hide-at-run-time')
|
|
48
|
+
hideAtRunTime = true;
|
|
49
|
+
else if (a === 'node-projects-lock-at-design-time')
|
|
50
|
+
lockAtDesignTime = true;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
style = attr[a];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if ((element instanceof HTMLElement || element instanceof SVGElement) && style) {
|
|
57
|
+
let styleParser = new CssAttributeParser();
|
|
58
|
+
styleParser.parse(style);
|
|
59
|
+
for (let s of styleParser.entries) {
|
|
60
|
+
designItem.setStyle(s.name, s.value);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
designItem.hideAtDesignTime = hideAtDesignTime;
|
|
64
|
+
designItem.hideAtRunTime = hideAtRunTime;
|
|
65
|
+
designItem.lockAtDesignTime = lockAtDesignTime;
|
|
66
|
+
element.draggable = false; //even if it should be true, for better designer exp.
|
|
67
|
+
for (let c of item.childNodes) {
|
|
68
|
+
let di = this._createDesignItemsRecursive(c, serviceContainer, instanceServiceContainer, element instanceof SVGElement ? 'http://www.w3.org/2000/svg' : null);
|
|
69
|
+
designItem.insertChild(di);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (item.nodeType == 3) {
|
|
73
|
+
this._parseDiv.innerHTML = item.rawText;
|
|
74
|
+
let element = this._parseDiv.childNodes[0];
|
|
75
|
+
designItem = new DesignItem(element, serviceContainer, instanceServiceContainer);
|
|
76
|
+
}
|
|
77
|
+
else if (item.nodeType == 8) {
|
|
78
|
+
let element = document.createComment(item.rawText);
|
|
79
|
+
designItem = new DesignItem(element, serviceContainer, instanceServiceContainer);
|
|
80
|
+
}
|
|
81
|
+
return designItem;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -11,6 +11,6 @@ export declare class CommonPropertiesService implements IPropertiesService {
|
|
|
11
11
|
setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
|
|
12
12
|
clearValue(designItems: IDesignItem[], property: IProperty): void;
|
|
13
13
|
isSet(designItems: IDesignItem[], property: IProperty): ValueType;
|
|
14
|
-
getValue(designItems: IDesignItem[], property: IProperty): string | boolean
|
|
14
|
+
getValue(designItems: IDesignItem[], property: IProperty): string | boolean;
|
|
15
15
|
getUnsetValue(designItems: IDesignItem[], property: IProperty): any;
|
|
16
16
|
}
|
|
@@ -14,6 +14,6 @@ export declare class CssPropertiesService implements IPropertiesService {
|
|
|
14
14
|
setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
|
|
15
15
|
clearValue(designItems: IDesignItem[], property: IProperty): void;
|
|
16
16
|
isSet(designItems: IDesignItem[], property: IProperty): ValueType;
|
|
17
|
-
getValue(designItems: IDesignItem[], property: IProperty): string
|
|
17
|
+
getValue(designItems: IDesignItem[], property: IProperty): string;
|
|
18
18
|
getUnsetValue(designItems: IDesignItem[], property: IProperty): any;
|
|
19
19
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ValueType } from '../ValueType';
|
|
2
2
|
import { NodeType } from '../../../item/NodeType';
|
|
3
|
+
import { BindingTarget } from '../../../item/BindingTarget.js';
|
|
3
4
|
export class CssPropertiesService {
|
|
4
5
|
constructor(name) {
|
|
5
6
|
//@ts-ignore
|
|
@@ -214,12 +215,19 @@ export class CssPropertiesService {
|
|
|
214
215
|
isSet(designItems, property) {
|
|
215
216
|
let all = true;
|
|
216
217
|
let some = false;
|
|
217
|
-
if (designItems != null && designItems.length !== 0)
|
|
218
|
+
if (designItems != null && designItems.length !== 0) {
|
|
218
219
|
designItems.forEach((x) => {
|
|
219
220
|
let has = x.styles.has(property.name);
|
|
220
221
|
all = all && has;
|
|
221
222
|
some = some || has;
|
|
222
223
|
});
|
|
224
|
+
//todo: optimize perf, do not call bindings service for each property.
|
|
225
|
+
const bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
|
|
226
|
+
return s.getBindings(designItems[0]);
|
|
227
|
+
});
|
|
228
|
+
if (bindings && bindings.find(x => x.target == BindingTarget.css && x.targetName == property.name))
|
|
229
|
+
return ValueType.bound;
|
|
230
|
+
}
|
|
223
231
|
else
|
|
224
232
|
return ValueType.none;
|
|
225
233
|
return all ? ValueType.all : some ? ValueType.some : ValueType.none;
|
package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.d.ts
CHANGED
|
@@ -11,6 +11,6 @@ export declare class UnkownElementPropertiesService implements IPropertiesServic
|
|
|
11
11
|
setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
|
|
12
12
|
clearValue(designItems: IDesignItem[], property: IProperty): void;
|
|
13
13
|
isSet(designItems: IDesignItem[], property: IProperty): ValueType;
|
|
14
|
-
getValue(designItems: IDesignItem[], property: IProperty): string | boolean
|
|
14
|
+
getValue(designItems: IDesignItem[], property: IProperty): string | boolean;
|
|
15
15
|
getUnsetValue(designItems: IDesignItem[], property: IProperty): any;
|
|
16
16
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ITransactionItem } from '../ITransactionItem';
|
|
2
2
|
import { IDesignItem } from '../../../item/IDesignItem';
|
|
3
|
-
import { IBinding } from '
|
|
3
|
+
import { IBinding } from '../../../item/IBinding.js';
|
|
4
4
|
export declare class AttributeChangeAction implements ITransactionItem {
|
|
5
5
|
constructor(designItem: IDesignItem, name: string, newValue: string | IBinding | null, oldValue: string | IBinding | null);
|
|
6
6
|
title?: string;
|
|
@@ -199,8 +199,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
199
199
|
this.snapLines = new Snaplines(this.overlayLayer);
|
|
200
200
|
this.snapLines.initialize(this.rootDesignItem);
|
|
201
201
|
if (this.children) {
|
|
202
|
+
let children = this.children;
|
|
203
|
+
if (this.children.length == 1 && this.children[0] instanceof HTMLSlotElement) {
|
|
204
|
+
children = this.children[0].assignedElements();
|
|
205
|
+
}
|
|
202
206
|
const parser = this.serviceContainer.getLastServiceWhere('htmlParserService', x => x.constructor == DefaultHtmlParserService);
|
|
203
|
-
this.addDesignItems(parser.createDesignItems(
|
|
207
|
+
this.addDesignItems(parser.createDesignItems(children, this.serviceContainer, this.instanceServiceContainer));
|
|
204
208
|
}
|
|
205
209
|
}
|
|
206
210
|
elementFromPoint(x, y) {
|
|
@@ -8,6 +8,7 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
8
8
|
const outer = this._getDomElement('outer');
|
|
9
9
|
this._designerCanvas = new DesignerCanvas();
|
|
10
10
|
this._designerCanvas.id = "canvas";
|
|
11
|
+
this._designerCanvas.appendChild(document.createElement("slot"));
|
|
11
12
|
outer.insertAdjacentElement('afterbegin', this._designerCanvas);
|
|
12
13
|
this._zoomInput = this._getDomElement('zoomInput');
|
|
13
14
|
this._zoomInput.onchange = () => { this._designerCanvas.zoomFactor = parseFloat(this._zoomInput.value) / 100; };
|
|
@@ -11,10 +11,18 @@ export class PositionExtension extends AbstractExtension {
|
|
|
11
11
|
let itemRect = this.extendedItem.element.getBoundingClientRect();
|
|
12
12
|
const xOffset = itemRect.x - this.designerView.containerBoundingRect.x;
|
|
13
13
|
const yOffset = itemRect.y - this.designerView.containerBoundingRect.y;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
let left = Number.parseFloat(computedStyle.left.replace('px', ''));
|
|
15
|
+
if (isNaN(left))
|
|
16
|
+
left = 0;
|
|
17
|
+
let top = Number.parseFloat(computedStyle.top.replace('px', ''));
|
|
18
|
+
if (isNaN(top))
|
|
19
|
+
top = 0;
|
|
20
|
+
let right = Number.parseFloat(computedStyle.right.replace('px', ''));
|
|
21
|
+
if (isNaN(right))
|
|
22
|
+
right = 0;
|
|
23
|
+
let bottom = Number.parseFloat(computedStyle.bottom.replace('px', ''));
|
|
24
|
+
if (isNaN(bottom))
|
|
25
|
+
bottom = 0;
|
|
18
26
|
let tx = 0;
|
|
19
27
|
let ty = 0;
|
|
20
28
|
if (computedStyle.transform !== 'none') {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { IElementDefinition } from '../../../services/elementsService/IElementDefinition';
|
|
2
|
+
import { ServiceContainer } from '../../../services/ServiceContainer.js';
|
|
2
3
|
import { IDesignerCanvas } from '../IDesignerCanvas';
|
|
3
4
|
import { ITool } from './ITool';
|
|
4
5
|
export declare class DrawElementTool implements ITool {
|
|
@@ -8,6 +9,7 @@ export declare class DrawElementTool implements ITool {
|
|
|
8
9
|
readonly cursor = "crosshair";
|
|
9
10
|
private _rect;
|
|
10
11
|
constructor(elementDefinition: IElementDefinition);
|
|
12
|
+
activated(serviceContainer: ServiceContainer): void;
|
|
11
13
|
dispose(): void;
|
|
12
14
|
pointerEventHandler(designerView: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
13
15
|
private _onPointerDown;
|
|
@@ -6,6 +6,8 @@ export class DrawElementTool {
|
|
|
6
6
|
this.cursor = 'crosshair';
|
|
7
7
|
this._elementDefinition = elementDefinition;
|
|
8
8
|
}
|
|
9
|
+
activated(serviceContainer) {
|
|
10
|
+
}
|
|
9
11
|
dispose() {
|
|
10
12
|
if (this._createdItem)
|
|
11
13
|
this._createdItem.element.parentElement.removeChild(this._createdItem.element);
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { IDesignerCanvas } from '../IDesignerCanvas';
|
|
2
2
|
import { ITool } from './ITool';
|
|
3
|
+
import { ServiceContainer } from '../../../services/ServiceContainer.js';
|
|
3
4
|
export declare class DrawPathTool implements ITool {
|
|
4
5
|
readonly cursor = "crosshair";
|
|
5
6
|
private _pathD;
|
|
6
7
|
private _path;
|
|
7
8
|
private _initialPoint;
|
|
8
9
|
constructor();
|
|
10
|
+
activated(serviceContainer: ServiceContainer): void;
|
|
9
11
|
dispose(): void;
|
|
10
12
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
11
13
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { IDisposable } from "../../../../interfaces/IDisposable";
|
|
2
|
+
import { ServiceContainer } from "../../../services/ServiceContainer.js";
|
|
2
3
|
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
3
4
|
export interface ITool extends IDisposable {
|
|
4
5
|
readonly cursor: string;
|
|
6
|
+
activated(serviceContainer: ServiceContainer): any;
|
|
5
7
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): any;
|
|
6
8
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ServiceContainer } from '../../../services/ServiceContainer.js';
|
|
1
2
|
import { IDesignerCanvas } from '../IDesignerCanvas';
|
|
2
3
|
import { ITool } from './ITool';
|
|
3
4
|
export declare class MagicWandSelectorTool implements ITool {
|
|
@@ -6,5 +7,6 @@ export declare class MagicWandSelectorTool implements ITool {
|
|
|
6
7
|
private _path;
|
|
7
8
|
private _initialPoint;
|
|
8
9
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
10
|
+
activated(serviceContainer: ServiceContainer): void;
|
|
9
11
|
dispose(): void;
|
|
10
12
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { ServiceContainer } from '../../../services/ServiceContainer.js';
|
|
1
2
|
import { IDesignerCanvas } from '../IDesignerCanvas';
|
|
2
3
|
import { ITool } from './ITool';
|
|
3
4
|
export declare class PanTool implements ITool {
|
|
4
5
|
readonly cursor: string;
|
|
5
6
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
7
|
+
activated(serviceContainer: ServiceContainer): void;
|
|
6
8
|
dispose(): void;
|
|
7
9
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { IDesignerCanvas } from '../IDesignerCanvas';
|
|
2
2
|
import { ITool } from './ITool';
|
|
3
|
+
import { ServiceContainer } from '../../../services/ServiceContainer';
|
|
3
4
|
export declare class PickColorTool implements ITool {
|
|
4
5
|
readonly cursor = "crosshair";
|
|
6
|
+
activated(serviceContainer: ServiceContainer): Promise<void>;
|
|
5
7
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): Promise<void>;
|
|
6
8
|
dispose(): void;
|
|
7
9
|
}
|
|
@@ -1,25 +1,21 @@
|
|
|
1
|
-
import { EventNames } from '../../../../enums/EventNames.js';
|
|
2
1
|
export class PickColorTool {
|
|
3
2
|
constructor() {
|
|
4
3
|
this.cursor = 'crosshair';
|
|
5
4
|
}
|
|
6
|
-
async
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
designerCanvas.serviceContainer.globalContext.strokeColor = color;
|
|
17
|
-
}
|
|
18
|
-
finally {
|
|
19
|
-
designerCanvas.serviceContainer.globalContext.finishedWithTool(this);
|
|
20
|
-
}
|
|
5
|
+
async activated(serviceContainer) {
|
|
6
|
+
try {
|
|
7
|
+
//@ts-ignore
|
|
8
|
+
const eyeDropper = new EyeDropper();
|
|
9
|
+
const colorSelectionResult = await eyeDropper.open();
|
|
10
|
+
const color = colorSelectionResult.sRGBHex;
|
|
11
|
+
serviceContainer.globalContext.strokeColor = color;
|
|
12
|
+
}
|
|
13
|
+
finally {
|
|
14
|
+
serviceContainer.globalContext.finishedWithTool(this);
|
|
21
15
|
}
|
|
22
16
|
}
|
|
17
|
+
async pointerEventHandler(designerCanvas, event, currentElement) {
|
|
18
|
+
}
|
|
23
19
|
dispose() {
|
|
24
20
|
}
|
|
25
21
|
}
|