@node-projects/web-component-designer 0.0.28 → 0.0.32

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 (64) hide show
  1. package/debug.log +8 -0
  2. package/dist/elements/controls/DesignerTabControl.d.ts +5 -1
  3. package/dist/elements/controls/DesignerTabControl.js +86 -8
  4. package/dist/elements/helper/CssCombiner.d.ts +1 -2
  5. package/dist/elements/helper/CssPropertiesList.d.ts +0 -0
  6. package/dist/elements/helper/CssPropertiesList.js +1 -0
  7. package/dist/elements/item/Binding.d.ts +14 -0
  8. package/dist/elements/item/Binding.js +4 -0
  9. package/dist/elements/item/BindingMode.d.ts +4 -0
  10. package/dist/elements/item/BindingMode.js +5 -0
  11. package/dist/elements/item/BindingTarget.d.ts +8 -0
  12. package/dist/elements/item/BindingTarget.js +9 -0
  13. package/dist/elements/item/DesignItem.d.ts +4 -7
  14. package/dist/elements/item/DesignItem.js +0 -15
  15. package/dist/elements/item/IBinding copy.d.ts +14 -0
  16. package/dist/elements/item/IBinding copy.js +1 -0
  17. package/dist/elements/item/IBinding.d.ts +15 -0
  18. package/dist/elements/item/IBinding.js +1 -0
  19. package/dist/elements/item/IDesignItem.d.ts +4 -5
  20. package/dist/elements/services/DefaultServiceBootstrap.js +0 -3
  21. package/dist/elements/services/bindingsService/BaseCustomWebcomponentBindingsService.d.ts +8 -0
  22. package/dist/elements/services/bindingsService/BaseCustomWebcomponentBindingsService.js +69 -0
  23. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService copy.d.ts +9 -0
  24. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService copy.js +31 -0
  25. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.d.ts +1 -1
  26. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.js +1 -1
  27. package/dist/elements/services/bindingsService/IBindingService.d.ts +3 -6
  28. package/dist/elements/services/bindingsService/PolymerBindingsService copy.d.ts +9 -0
  29. package/dist/elements/services/bindingsService/PolymerBindingsService copy.js +31 -0
  30. package/dist/elements/services/bindingsService/SpecialTagsBindingService.d.ts +14 -0
  31. package/dist/elements/services/bindingsService/SpecialTagsBindingService.js +40 -0
  32. package/dist/elements/services/bindingsService/VueBindingsService.d.ts +0 -0
  33. package/dist/elements/services/bindingsService/VueBindingsService.js +7 -0
  34. package/dist/elements/services/htmlParserService/NodeHtmlParserService.d.ts +2 -0
  35. package/dist/elements/services/htmlParserService/NodeHtmlParserService.js +3 -2
  36. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.d.ts +9 -0
  37. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.js +100 -0
  38. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.d.ts +11 -0
  39. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.js +84 -0
  40. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.d.ts +9 -0
  41. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.js +83 -0
  42. package/dist/elements/services/propertiesService/services/CommonPropertiesService copy.d.ts +16 -0
  43. package/dist/elements/services/propertiesService/services/CommonPropertiesService copy.js +94 -0
  44. package/dist/elements/services/propertiesService/services/CommonPropertiesService.d.ts +1 -1
  45. package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +1 -1
  46. package/dist/elements/services/propertiesService/services/CssPropertiesService.js +9 -1
  47. package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.d.ts +1 -1
  48. package/dist/elements/services/undoService/transactionItems/AttributeChangeAction.d.ts +1 -1
  49. package/dist/elements/widgets/designerView/designerCanvas.js +5 -1
  50. package/dist/elements/widgets/designerView/designerView copy.d.ts +82 -0
  51. package/dist/elements/widgets/designerView/designerView copy.js +671 -0
  52. package/dist/elements/widgets/designerView/designerView.js +1 -0
  53. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtension.d.ts +14 -0
  54. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtension.js +42 -0
  55. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.d.ts +9 -0
  56. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.js +9 -0
  57. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtension.d.ts +27 -0
  58. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtension.js +61 -0
  59. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.d.ts +9 -0
  60. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.js +9 -0
  61. package/dist/elements/widgets/designerView/extensions/PositionExtension.js +12 -4
  62. package/dist/index.d.ts +4 -0
  63. package/dist/index.js +2 -0
  64. package/package.json +6 -7
@@ -0,0 +1,14 @@
1
+ import { IDesignItem } from "../../item/IDesignItem";
2
+ import { IBinding } from "../../item/IBinding";
3
+ import { IBindingService } from "./IBindingService";
4
+ export declare class SpecialTagsBindingService implements IBindingService {
5
+ static type: string;
6
+ _bindingTagName: string;
7
+ _elementIdAttribute: string;
8
+ _propertyNameAttribute: string;
9
+ _isStyleNameAttribute: string;
10
+ constructor();
11
+ getBindings(designItem: IDesignItem): IBinding[];
12
+ private _parseBindingElement;
13
+ setBinding(designItem: IDesignItem, binding: IBinding): boolean;
14
+ }
@@ -0,0 +1,40 @@
1
+ import { BindingTarget } from "../../item/BindingTarget.js";
2
+ import { BindingMode } from "../../item/BindingMode.js";
3
+ /* Service wich read binings from special HTMl elements -> like tag-binding */
4
+ export class SpecialTagsBindingService {
5
+ constructor() {
6
+ this._bindingTagName = "visu-tagbinding";
7
+ this._elementIdAttribute = "elemnt-id";
8
+ this._propertyNameAttribute = "property";
9
+ this._isStyleNameAttribute = "is-style";
10
+ }
11
+ getBindings(designItem) {
12
+ const bindings = [];
13
+ const directBindings = designItem.element.querySelectorAll(':scope > ' + this._bindingTagName);
14
+ for (let b of directBindings) {
15
+ bindings.push(this._parseBindingElement(b));
16
+ }
17
+ if (designItem.id) {
18
+ const nameBindings = designItem.instanceServiceContainer.contentService.rootDesignItem.element.querySelectorAll(this._bindingTagName + "[" + this._elementIdAttribute + "='" + designItem.id + "]");
19
+ for (let b of nameBindings) {
20
+ const bnd = this._parseBindingElement(b);
21
+ bnd.targetId = designItem.id;
22
+ bindings.push(bnd);
23
+ }
24
+ }
25
+ return null;
26
+ }
27
+ _parseBindingElement(b) {
28
+ let bnd = { targetName: b.getAttribute(this._propertyNameAttribute) };
29
+ bnd.target = b.hasAttribute(this._isStyleNameAttribute) ? BindingTarget.css : BindingTarget.property;
30
+ bnd.invert = b.hasAttribute('negative-logic');
31
+ bnd.rawValue = b.outerHTML;
32
+ bnd.type = SpecialTagsBindingService.type;
33
+ bnd.mode = b.hasAttribute('two-way') ? BindingMode.twoWay : BindingMode.oneWay;
34
+ return bnd;
35
+ }
36
+ setBinding(designItem, binding) {
37
+ return true;
38
+ }
39
+ }
40
+ SpecialTagsBindingService.type = 'visu-tagbinding-binding';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ //read vue bindings:
3
+ //v-bind:class
4
+ //v-bind:style
5
+ //v-if
6
+ //v-else
7
+ //v-show
@@ -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('../../../../../node-html-parser-esm/dist/index.js');
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) {
@@ -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
+ }
@@ -0,0 +1,16 @@
1
+ import { IPropertiesService } from "../IPropertiesService";
2
+ import { IProperty } from '../IProperty';
3
+ import { IDesignItem } from '../../../item/IDesignItem';
4
+ import { ValueType } from "../ValueType";
5
+ export declare class CommonPropertiesService implements IPropertiesService {
6
+ private commonProperties;
7
+ name: string;
8
+ isHandledElement(designItem: IDesignItem): boolean;
9
+ getProperty(designItem: IDesignItem, name: string): IProperty;
10
+ getProperties(designItem: IDesignItem): IProperty[];
11
+ setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
12
+ clearValue(designItems: IDesignItem[], property: IProperty): void;
13
+ isSet(designItems: IDesignItem[], property: IProperty): ValueType;
14
+ getValue(designItems: IDesignItem[], property: IProperty): string | boolean | import("../../bindingsService/IBinding").IBinding;
15
+ getUnsetValue(designItems: IDesignItem[], property: IProperty): any;
16
+ }
@@ -0,0 +1,94 @@
1
+ import { ValueType } from "../ValueType";
2
+ export class CommonPropertiesService {
3
+ constructor() {
4
+ //@ts-ignore
5
+ this.commonProperties = [
6
+ {
7
+ name: "id",
8
+ type: "string",
9
+ service: this
10
+ }, {
11
+ name: "class",
12
+ type: "string",
13
+ service: this
14
+ }, {
15
+ name: "title",
16
+ type: "string",
17
+ service: this
18
+ }, {
19
+ name: "tabindex",
20
+ type: "number",
21
+ service: this
22
+ }
23
+ ];
24
+ this.name = "common";
25
+ }
26
+ isHandledElement(designItem) {
27
+ return true;
28
+ }
29
+ getProperty(designItem, name) {
30
+ return this.commonProperties[name];
31
+ }
32
+ getProperties(designItem) {
33
+ return this.commonProperties;
34
+ }
35
+ setValue(designItems, property, value) {
36
+ for (let d of designItems) {
37
+ if (property.type == 'boolean' && !value) {
38
+ d.attributes.delete(property.name);
39
+ d.element.removeAttribute(property.name);
40
+ }
41
+ else if (property.type == 'boolean' && value) {
42
+ d.attributes.set(property.name, "");
43
+ d.element.setAttribute(property.name, "");
44
+ }
45
+ else {
46
+ d.attributes.set(property.name, value);
47
+ d.element.setAttribute(property.name, value);
48
+ }
49
+ }
50
+ }
51
+ clearValue(designItems, property) {
52
+ for (let d of designItems) {
53
+ d.attributes.delete(property.name);
54
+ d.element.removeAttribute(property.name);
55
+ }
56
+ }
57
+ isSet(designItems, property) {
58
+ let all = true;
59
+ let some = false;
60
+ if (designItems != null && designItems.length !== 0) {
61
+ let attributeName = property.name;
62
+ designItems.forEach((x) => {
63
+ let has = x.attributes.has(attributeName);
64
+ all = all && has;
65
+ some = some || has;
66
+ });
67
+ }
68
+ else
69
+ return ValueType.none;
70
+ return all ? ValueType.all : some ? ValueType.some : ValueType.none;
71
+ }
72
+ getValue(designItems, property) {
73
+ if (designItems != null && designItems.length !== 0) {
74
+ let attributeName = property.name;
75
+ if (property.type == 'boolean')
76
+ return designItems[0].attributes.has(attributeName);
77
+ let lastValue = designItems[0].attributes.get(attributeName);
78
+ /*
79
+ for (const x of designItems) {
80
+ let value = x.attributes.get(attributeName);
81
+ if (value != lastValue) {
82
+ lastValue = null;
83
+ break;
84
+ }
85
+ }
86
+ */
87
+ return lastValue;
88
+ }
89
+ return null;
90
+ }
91
+ getUnsetValue(designItems, property) {
92
+ return property.defaultValue;
93
+ }
94
+ }
@@ -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 | import("../../bindingsService/IBinding").IBinding;
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 | import("../../bindingsService/IBinding").IBinding;
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;
@@ -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 | import("../../bindingsService/IBinding").IBinding;
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 '../../bindingsService/IBinding.js';
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(this.children, this.serviceContainer, this.instanceServiceContainer));
207
+ this.addDesignItems(parser.createDesignItems(children, this.serviceContainer, this.instanceServiceContainer));
204
208
  }
205
209
  }
206
210
  elementFromPoint(x, y) {