@node-projects/web-component-designer 0.0.69 → 0.0.73

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 (37) hide show
  1. package/dist/elements/helper/CssCombiner.js +1 -0
  2. package/dist/elements/item/DesignItem.d.ts +5 -1
  3. package/dist/elements/item/DesignItem.js +56 -29
  4. package/dist/elements/item/IDesignItem.d.ts +4 -0
  5. package/dist/elements/services/bindingsService/BaseCustomWebcomponentBindingsService.d.ts +2 -0
  6. package/dist/elements/services/bindingsService/BaseCustomWebcomponentBindingsService.js +3 -0
  7. package/dist/elements/services/bindingsService/IBindingService.d.ts +2 -0
  8. package/dist/elements/services/bindingsService/SpecialTagsBindingService.d.ts +2 -0
  9. package/dist/elements/services/bindingsService/SpecialTagsBindingService.js +3 -0
  10. package/dist/elements/services/htmlParserService/NodeHtmlParserService.js +1 -1
  11. package/dist/elements/services/modelCommandService/DefaultModelCommandService.js +12 -8
  12. package/dist/elements/services/propertiesService/IPropertiesService.d.ts +2 -0
  13. package/dist/elements/services/propertiesService/services/AttributesPropertiesService.d.ts +2 -0
  14. package/dist/elements/services/propertiesService/services/AttributesPropertiesService.js +4 -0
  15. package/dist/elements/services/propertiesService/services/CommonPropertiesService.d.ts +2 -0
  16. package/dist/elements/services/propertiesService/services/CommonPropertiesService.js +13 -0
  17. package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +2 -0
  18. package/dist/elements/services/propertiesService/services/CssPropertiesService.js +6 -0
  19. package/dist/elements/services/propertiesService/services/PropertiesHelper.js +1 -1
  20. package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.d.ts +2 -0
  21. package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.js +7 -0
  22. package/dist/elements/services/undoService/transactionItems/DeleteAction.d.ts +1 -3
  23. package/dist/elements/services/undoService/transactionItems/DeleteAction.js +2 -5
  24. package/dist/elements/services/undoService/transactionItems/InsertAction.js +1 -1
  25. package/dist/elements/services/undoService/transactionItems/InsertChildAction.d.ts +16 -0
  26. package/dist/elements/services/undoService/transactionItems/InsertChildAction.js +31 -0
  27. package/dist/elements/services/undoService/transactionItems/MoveElementInDomAction copy.d.ts +16 -0
  28. package/dist/elements/services/undoService/transactionItems/MoveElementInDomAction copy.js +32 -0
  29. package/dist/elements/widgets/bindableObjectsBrowser/bindable-objects-browser.d.ts +1 -3
  30. package/dist/elements/widgets/codeView/code-view-monaco.js +3 -3
  31. package/dist/elements/widgets/designerView/designerCanvas.js +2 -2
  32. package/dist/elements/widgets/designerView/tools/PointerTool.js +1 -1
  33. package/dist/index.d.ts +2 -1
  34. package/dist/index.js +2 -1
  35. package/package.json +1 -1
  36. package/dist/elements/widgets/designerView/DesignerViewUseOverlayScollbars.d.ts +0 -7
  37. package/dist/elements/widgets/designerView/DesignerViewUseOverlayScollbars.js +0 -13
@@ -1,6 +1,7 @@
1
1
  export class CssCombiner {
2
2
  static _helperElement = document.createElement('div');
3
3
  //todo: inset, flex flow, place content...
4
+ //flex => flex-grow, flex-shrink, flex-basis
4
5
  static combine(styles, globalStyles) {
5
6
  let e = CssCombiner._helperElement;
6
7
  e.setAttribute('style', '');
@@ -24,12 +24,14 @@ export declare class DesignItem implements IDesignItem {
24
24
  get id(): string;
25
25
  set id(value: string);
26
26
  get isRootItem(): boolean;
27
- private _childArray;
27
+ _childArray: IDesignItem[];
28
28
  get hasChildren(): boolean;
29
29
  children(): IterableIterator<IDesignItem>;
30
30
  get childCount(): number;
31
31
  get firstChild(): IDesignItem;
32
32
  get parent(): IDesignItem;
33
+ indexOf(designItem: IDesignItem): number;
34
+ insertAdjacentElement(designItem: IDesignItem, where: InsertPosition): void;
33
35
  insertChild(designItem: IDesignItem, index?: number): void;
34
36
  removeChild(designItem: IDesignItem): void;
35
37
  remove(): void;
@@ -57,4 +59,6 @@ export declare class DesignItem implements IDesignItem {
57
59
  removeStyle(name: string): void;
58
60
  setAttribute(name: string, value?: string | null): void;
59
61
  removeAttribute(name: string): void;
62
+ _insertChildInternal(designItem: IDesignItem, index?: number): void;
63
+ _removeChildInternal(designItem: IDesignItem): void;
60
64
  }
@@ -2,9 +2,10 @@ import { CssStyleChangeAction } from '../services/undoService/transactionItems/C
2
2
  import { NodeType } from './NodeType';
3
3
  import { AttributeChangeAction } from '../services/undoService/transactionItems/AttributeChangeAction';
4
4
  import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType';
5
- import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper';
6
5
  import { CssAttributeParser } from '../helper/CssAttributeParser.js';
7
6
  import { PropertiesHelper } from '../services/propertiesService/services/PropertiesHelper.js';
7
+ import { InsertChildAction } from '../services/undoService/transactionItems/InsertChildAction';
8
+ import { DeleteAction } from '../..';
8
9
  const hideAtDesignTimeAttributeName = 'node-projects-hide-at-design-time';
9
10
  const hideAtRunTimeAttributeName = 'node-projects-hide-at-run-time';
10
11
  const lockAtDesignTimeAttributeName = 'node-projects-lock-at-design-time';
@@ -69,44 +70,41 @@ export class DesignItem {
69
70
  get parent() {
70
71
  return this.getOrCreateDesignItem(this.element.parentNode);
71
72
  }
72
- insertChild(designItem, index) {
73
- //todo... via undoredo system....
74
- if (designItem.parent && this.instanceServiceContainer.selectionService.primarySelection == designItem)
75
- designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
76
- if (designItem.parent) {
77
- designItem.parent.removeChild(designItem);
73
+ indexOf(designItem) {
74
+ return this._childArray.indexOf(designItem);
75
+ }
76
+ insertAdjacentElement(designItem, where) {
77
+ if (where == 'afterbegin') {
78
+ this._insertChildInternal(designItem, 0);
78
79
  }
79
- this.removeChild(designItem);
80
- if (index == null || this._childArray.length == 0 || index >= this._childArray.length) {
81
- this._childArray.push(designItem);
82
- this.element.appendChild(designItem.node);
80
+ else if (where == 'beforeend') {
81
+ this._insertChildInternal(designItem);
83
82
  }
84
- else {
85
- let el = this._childArray[index];
86
- this.node.insertBefore(designItem.node, el.element);
87
- this._childArray.splice(index, 0, designItem);
83
+ else if (where == 'beforebegin') {
84
+ this.parent._insertChildInternal(designItem, this.parent.indexOf(this));
85
+ }
86
+ else if (where == 'afterend') {
87
+ this.parent._insertChildInternal(designItem, this.parent.indexOf(this) + 1);
88
88
  }
89
- if (this.instanceServiceContainer.selectionService.primarySelection == designItem)
90
- designItem.instanceServiceContainer.designerCanvas.extensionManager.applyExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
89
+ }
90
+ insertChild(designItem, index) {
91
+ const action = new InsertChildAction(designItem, this, index);
92
+ this.instanceServiceContainer.undoService.execute(action);
91
93
  }
92
94
  removeChild(designItem) {
93
- //todo... via undoredo system....
94
- if (designItem.parent && this.instanceServiceContainer.selectionService.primarySelection == designItem)
95
- designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
96
- const index = this._childArray.indexOf(designItem);
97
- if (index > -1) {
98
- this._childArray.splice(index, 1);
99
- designItem.element.remove();
100
- }
95
+ const action = new DeleteAction([designItem]);
96
+ this.instanceServiceContainer.undoService.execute(action);
101
97
  }
102
98
  remove() {
103
- this.parent.removeChild(this);
99
+ this.parent._removeChildInternal(this);
104
100
  }
105
101
  clearChildren() {
106
- this._childArray = [];
107
- DomHelper.removeAllChildnodes(this.element);
102
+ for (let i = this._childArray.length - 1; i >= 0; i--) {
103
+ let di = this._childArray[i];
104
+ di.remove();
105
+ }
108
106
  }
109
- //abstract text content to own property. so only chnage via designer api will use it.
107
+ //abstract text content to own property. so only change via designer api will use it.
110
108
  get hasContent() {
111
109
  return this.nodeType == NodeType.TextNode || (this._childArray.length === 0 && this.content !== null);
112
110
  }
@@ -259,4 +257,33 @@ export class DesignItem {
259
257
  const action = new AttributeChangeAction(this, name, null, this.attributes.get(name));
260
258
  this.instanceServiceContainer.undoService.execute(action);
261
259
  }
260
+ // Internal implementations wich don't use undo/redo
261
+ _insertChildInternal(designItem, index) {
262
+ if (designItem.parent && this.instanceServiceContainer.selectionService.primarySelection == designItem)
263
+ designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
264
+ if (designItem.parent) {
265
+ designItem.parent._removeChildInternal(designItem);
266
+ }
267
+ if (index == null || this._childArray.length == 0 || index >= this._childArray.length) {
268
+ this._childArray.push(designItem);
269
+ this.element.appendChild(designItem.node);
270
+ }
271
+ else {
272
+ let el = this._childArray[index];
273
+ this.node.insertBefore(designItem.node, el.element);
274
+ this._childArray.splice(index, 0, designItem);
275
+ }
276
+ if (this.instanceServiceContainer.selectionService.primarySelection == designItem)
277
+ designItem.instanceServiceContainer.designerCanvas.extensionManager.applyExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
278
+ }
279
+ _removeChildInternal(designItem) {
280
+ if (designItem.parent && this.instanceServiceContainer.selectionService.primarySelection == designItem)
281
+ designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
282
+ designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtensions([designItem]);
283
+ const index = this._childArray.indexOf(designItem);
284
+ if (index > -1) {
285
+ this._childArray.splice(index, 1);
286
+ designItem.element.remove();
287
+ }
288
+ }
262
289
  }
@@ -21,6 +21,10 @@ export interface IDesignItem {
21
21
  readonly childCount: number;
22
22
  readonly firstChild: IDesignItem;
23
23
  readonly parent: IDesignItem;
24
+ _insertChildInternal(designItem: IDesignItem, index?: number): any;
25
+ _removeChildInternal(designItem: IDesignItem): any;
26
+ indexOf(designItem: IDesignItem): number;
27
+ insertAdjacentElement(designItem: IDesignItem, where: InsertPosition): any;
24
28
  insertChild(designItem: IDesignItem, index?: number): any;
25
29
  removeChild(designItem: IDesignItem): any;
26
30
  remove(): any;
@@ -1,8 +1,10 @@
1
1
  import { IDesignItem } from "../../item/IDesignItem";
2
2
  import { IBinding } from '../../item/IBinding';
3
3
  import { IBindingService } from "./IBindingService";
4
+ import { BindingTarget } from "../../item/BindingTarget.js";
4
5
  export declare class BaseCustomWebcomponentBindingsService implements IBindingService {
5
6
  static type: string;
6
7
  getBindings(designItem: IDesignItem): IBinding[];
7
8
  setBinding(designItem: IDesignItem, binding: IBinding): boolean;
9
+ clearBinding(designItem: IDesignItem, propertyName: string, propertyTarget: BindingTarget): boolean;
8
10
  }
@@ -66,4 +66,7 @@ export class BaseCustomWebcomponentBindingsService {
66
66
  designItem.setAttribute(nm, value);
67
67
  return true;
68
68
  }
69
+ clearBinding(designItem, propertyName, propertyTarget) {
70
+ return true;
71
+ }
69
72
  }
@@ -1,5 +1,6 @@
1
1
  import { IDesignItem } from "../../item/IDesignItem";
2
2
  import { IBinding } from "../../item/IBinding";
3
+ import { BindingTarget } from "../../item/BindingTarget";
3
4
  /**
4
5
  * Can be used to parse bindings wich are done via special HTML Attributes or special Elements
5
6
  * If your Bindings are to special, or HTML is not valid with them, maybe you need to parse the Bindings already in the
@@ -8,4 +9,5 @@ import { IBinding } from "../../item/IBinding";
8
9
  export interface IBindingService {
9
10
  getBindings(designItem: IDesignItem): IBinding[];
10
11
  setBinding(designItem: IDesignItem, binding: IBinding): boolean;
12
+ clearBinding(designItem: IDesignItem, propertyName: string, propertyTarget: BindingTarget): boolean;
11
13
  }
@@ -1,6 +1,7 @@
1
1
  import { IDesignItem } from "../../item/IDesignItem";
2
2
  import { IBinding } from "../../item/IBinding";
3
3
  import { IBindingService } from "./IBindingService";
4
+ import { BindingTarget } from "../../item/BindingTarget.js";
4
5
  export declare class SpecialTagsBindingService implements IBindingService {
5
6
  static type: string;
6
7
  _bindingTagName: string;
@@ -11,4 +12,5 @@ export declare class SpecialTagsBindingService implements IBindingService {
11
12
  getBindings(designItem: IDesignItem): IBinding[];
12
13
  private _parseBindingElement;
13
14
  setBinding(designItem: IDesignItem, binding: IBinding): boolean;
15
+ clearBinding(designItem: IDesignItem, propertyName: string, propertyTarget: BindingTarget): boolean;
14
16
  }
@@ -37,4 +37,7 @@ export class SpecialTagsBindingService {
37
37
  setBinding(designItem, binding) {
38
38
  return true;
39
39
  }
40
+ clearBinding(designItem, propertyName, propertyTarget) {
41
+ return true;
42
+ }
40
43
  }
@@ -70,7 +70,7 @@ export class NodeHtmlParserService {
70
70
  element.draggable = false; //even if it should be true, for better designer exp.
71
71
  for (let c of item.childNodes) {
72
72
  let di = this._createDesignItemsRecursive(c, serviceContainer, instanceServiceContainer, element instanceof SVGElement ? 'http://www.w3.org/2000/svg' : null);
73
- designItem.insertChild(di);
73
+ designItem._insertChildInternal(di);
74
74
  }
75
75
  }
76
76
  else if (item.nodeType == 3) {
@@ -1,6 +1,4 @@
1
1
  import { CommandType } from "../../../commandHandling/CommandType.js";
2
- import { DesignItem } from "../../item/DesignItem.js";
3
- import { MoveElementInDomAction } from "../undoService/transactionItems/MoveElementInDomAction.js";
4
2
  export class DefaultModelCommandService {
5
3
  canExecuteCommand(designerCanvas, command) {
6
4
  if (command.type == CommandType.moveBackward ||
@@ -21,14 +19,20 @@ export class DefaultModelCommandService {
21
19
  }
22
20
  async executeCommand(designerCanvas, command) {
23
21
  let sel = designerCanvas.instanceServiceContainer.selectionService.primarySelection;
24
- if (command.type == CommandType.moveBackward)
25
- designerCanvas.instanceServiceContainer.undoService.execute(new MoveElementInDomAction(sel, DesignItem.GetDesignItem(sel.element.previousElementSibling), 'beforebegin', DesignItem.GetDesignItem(sel.element.previousElementSibling), 'afterend'));
26
- else if (command.type == CommandType.moveForward)
27
- designerCanvas.instanceServiceContainer.undoService.execute(new MoveElementInDomAction(sel, DesignItem.GetDesignItem(sel.element.nextElementSibling), 'afterend', DesignItem.GetDesignItem(sel.element.nextElementSibling), 'beforebegin'));
22
+ if (command.type == CommandType.moveBackward) {
23
+ let idx = sel.parent.indexOf(sel) - 1;
24
+ if (idx >= 0)
25
+ sel.parent.insertChild(sel, idx);
26
+ }
27
+ else if (command.type == CommandType.moveForward) {
28
+ let idx = sel.parent.indexOf(sel) + 1;
29
+ if (idx < sel.parent.childCount)
30
+ sel.parent.insertChild(sel, idx);
31
+ }
28
32
  else if (command.type == CommandType.moveToBack)
29
- designerCanvas.instanceServiceContainer.undoService.execute(new MoveElementInDomAction(sel, DesignItem.GetDesignItem(sel.element.parentElement), 'afterbegin', DesignItem.GetDesignItem(sel.element.previousElementSibling), 'afterend'));
33
+ sel.parent.insertChild(sel, 0);
30
34
  else if (command.type == CommandType.moveToFront)
31
- designerCanvas.instanceServiceContainer.undoService.execute(new MoveElementInDomAction(sel, DesignItem.GetDesignItem(sel.element.parentElement), 'beforeend', DesignItem.GetDesignItem(sel.element.nextElementSibling), 'beforebegin'));
35
+ sel.parent.insertChild(sel);
32
36
  else if (command.type == CommandType.arrangeLeft) {
33
37
  const grp = designerCanvas.instanceServiceContainer.selectionService.primarySelection.openGroup('arrangeLeft');
34
38
  const left = designerCanvas.instanceServiceContainer.selectionService.primarySelection.styles.get('left');
@@ -2,11 +2,13 @@ import { IProperty } from './IProperty';
2
2
  import { IService } from '../IService';
3
3
  import { IDesignItem } from '../../item/IDesignItem';
4
4
  import { ValueType } from './ValueType';
5
+ import { BindingTarget } from '../../item/BindingTarget';
5
6
  export interface IPropertiesService extends IService {
6
7
  readonly name: string;
7
8
  isHandledElement(designItem: IDesignItem): boolean;
8
9
  getProperties(designItem: IDesignItem): IProperty[];
9
10
  getProperty(designItem: IDesignItem, name: string): IProperty;
11
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
10
12
  setValue(designItems: IDesignItem[], property: IProperty, value: any): any;
11
13
  clearValue(designItems: IDesignItem[], property: IProperty): any;
12
14
  isSet(designItems: IDesignItem[], property: IProperty): ValueType;
@@ -2,12 +2,14 @@ import { IPropertiesService } from "../IPropertiesService";
2
2
  import { IProperty } from '../IProperty';
3
3
  import { IDesignItem } from '../../../item/IDesignItem';
4
4
  import { ValueType } from "../ValueType";
5
+ import { BindingTarget } from "../../../item/BindingTarget";
5
6
  export declare class AttributesPropertiesService implements IPropertiesService {
6
7
  name: string;
7
8
  isHandledElement(designItem: IDesignItem): boolean;
8
9
  getProperty(designItem: IDesignItem, name: string): IProperty;
9
10
  getProperties(designItem: IDesignItem): IProperty[];
10
11
  setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
12
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
11
13
  clearValue(designItems: IDesignItem[], property: IProperty): void;
12
14
  isSet(designItems: IDesignItem[], property: IProperty): ValueType;
13
15
  getValue(designItems: IDesignItem[], property: IProperty): string;
@@ -1,4 +1,5 @@
1
1
  import { ValueType } from "../ValueType";
2
+ import { BindingTarget } from "../../../item/BindingTarget";
2
3
  export class AttributesPropertiesService {
3
4
  name = "attributes";
4
5
  isHandledElement(designItem) {
@@ -19,6 +20,9 @@ export class AttributesPropertiesService {
19
20
  }
20
21
  setValue(designItems, property, value) {
21
22
  }
23
+ getPropertyTarget(designItem, property) {
24
+ return BindingTarget.attribute;
25
+ }
22
26
  clearValue(designItems, property) {
23
27
  }
24
28
  isSet(designItems, property) {
@@ -2,6 +2,7 @@ import { IPropertiesService } from "../IPropertiesService";
2
2
  import { IProperty } from '../IProperty';
3
3
  import { IDesignItem } from '../../../item/IDesignItem';
4
4
  import { ValueType } from "../ValueType";
5
+ import { BindingTarget } from "../../../item/BindingTarget";
5
6
  export declare class CommonPropertiesService implements IPropertiesService {
6
7
  private commonProperties;
7
8
  name: string;
@@ -9,6 +10,7 @@ export declare class CommonPropertiesService implements IPropertiesService {
9
10
  getProperty(designItem: IDesignItem, name: string): IProperty;
10
11
  getProperties(designItem: IDesignItem): IProperty[];
11
12
  setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
13
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
12
14
  clearValue(designItems: IDesignItem[], property: IProperty): void;
13
15
  isSet(designItems: IDesignItem[], property: IProperty): ValueType;
14
16
  getValue(designItems: IDesignItem[], property: IProperty): string | boolean;
@@ -1,4 +1,5 @@
1
1
  import { ValueType } from "../ValueType";
2
+ import { BindingTarget } from "../../../item/BindingTarget";
2
3
  export class CommonPropertiesService {
3
4
  //@ts-ignore
4
5
  commonProperties = [
@@ -46,10 +47,16 @@ export class CommonPropertiesService {
46
47
  }
47
48
  }
48
49
  }
50
+ getPropertyTarget(designItem, property) {
51
+ return BindingTarget.property;
52
+ }
49
53
  clearValue(designItems, property) {
50
54
  for (let d of designItems) {
51
55
  d.attributes.delete(property.name);
52
56
  d.element.removeAttribute(property.name);
57
+ d.serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
58
+ return s.clearBinding(d, property.name, this.getPropertyTarget(d, property));
59
+ });
53
60
  }
54
61
  }
55
62
  isSet(designItems, property) {
@@ -62,6 +69,12 @@ export class CommonPropertiesService {
62
69
  all = all && has;
63
70
  some = some || has;
64
71
  });
72
+ //todo: optimize perf, do not call bindings service for each property.
73
+ const bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
74
+ return s.getBindings(designItems[0]);
75
+ });
76
+ if (bindings && bindings.find(x => x.target == BindingTarget.property && x.targetName == property.name))
77
+ return ValueType.bound;
65
78
  }
66
79
  else
67
80
  return ValueType.none;
@@ -2,6 +2,7 @@ import { IPropertiesService } from '../IPropertiesService';
2
2
  import { IProperty } from '../IProperty';
3
3
  import { IDesignItem } from '../../../item/IDesignItem';
4
4
  import { ValueType } from '../ValueType';
5
+ import { BindingTarget } from '../../../item/BindingTarget.js';
5
6
  export declare class CssPropertiesService implements IPropertiesService {
6
7
  private styles;
7
8
  private alignment;
@@ -13,6 +14,7 @@ export declare class CssPropertiesService implements IPropertiesService {
13
14
  getProperty(designItem: IDesignItem, name: string): IProperty;
14
15
  getProperties(designItem: IDesignItem): IProperty[];
15
16
  setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
17
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
16
18
  clearValue(designItems: IDesignItem[], property: IProperty): void;
17
19
  isSet(designItems: IDesignItem[], property: IProperty): ValueType;
18
20
  getValue(designItems: IDesignItem[], property: IProperty): string;
@@ -226,10 +226,16 @@ export class CssPropertiesService {
226
226
  }
227
227
  cg.commit();
228
228
  }
229
+ getPropertyTarget(designItem, property) {
230
+ return BindingTarget.css;
231
+ }
229
232
  clearValue(designItems, property) {
230
233
  for (let d of designItems) {
231
234
  d.styles.delete(property.name);
232
235
  d.element.style[property.name] = '';
236
+ d.serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
237
+ return s.clearBinding(d, property.name, this.getPropertyTarget(d, property));
238
+ });
233
239
  }
234
240
  }
235
241
  isSet(designItems, property) {
@@ -22,6 +22,6 @@ export class PropertiesHelper {
22
22
  return text.replace(/([A-Z])/g, (g) => `-${g[0].toLowerCase()}`);
23
23
  }
24
24
  static dashToCamelCase(text) {
25
- return text.replace(/-([a-z])/i, (i) => i[1].toUpperCase());
25
+ return text.replace(/-([a-z])/g, (i) => i[1].toUpperCase());
26
26
  }
27
27
  }
@@ -2,6 +2,7 @@ import { IPropertiesService } from "../IPropertiesService";
2
2
  import { IProperty } from '../IProperty';
3
3
  import { IDesignItem } from '../../../item/IDesignItem';
4
4
  import { ValueType } from "../ValueType";
5
+ import { BindingTarget } from "../../../item/BindingTarget";
5
6
  export declare class UnkownElementPropertiesService implements IPropertiesService {
6
7
  readonly name: string;
7
8
  isHandledElement(designItem: IDesignItem): boolean;
@@ -9,6 +10,7 @@ export declare class UnkownElementPropertiesService implements IPropertiesServic
9
10
  getProperty(designItem: IDesignItem, name: string): IProperty;
10
11
  getProperties(designItem: IDesignItem): IProperty[];
11
12
  setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
13
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
12
14
  clearValue(designItems: IDesignItem[], property: IProperty): void;
13
15
  isSet(designItems: IDesignItem[], property: IProperty): ValueType;
14
16
  getValue(designItems: IDesignItem[], property: IProperty): string | boolean;
@@ -1,5 +1,6 @@
1
1
  import { ValueType } from "../ValueType";
2
2
  import { PropertiesHelper } from './PropertiesHelper';
3
+ import { BindingTarget } from "../../../item/BindingTarget";
3
4
  export class UnkownElementPropertiesService {
4
5
  name = "unkown";
5
6
  isHandledElement(designItem) {
@@ -44,11 +45,17 @@ export class UnkownElementPropertiesService {
44
45
  cg.undo();
45
46
  }
46
47
  }
48
+ getPropertyTarget(designItem, property) {
49
+ return BindingTarget.property;
50
+ }
47
51
  clearValue(designItems, property) {
48
52
  const attributeName = PropertiesHelper.camelToDashCase(property.name);
49
53
  for (let d of designItems) {
50
54
  d.attributes.delete(attributeName);
51
55
  d.element.removeAttribute(attributeName);
56
+ d.serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
57
+ return s.clearBinding(d, property.name, this.getPropertyTarget(d, property));
58
+ });
52
59
  this._notifyChangedProperty(d, property, undefined);
53
60
  }
54
61
  }
@@ -1,14 +1,12 @@
1
1
  import { ITransactionItem } from '../ITransactionItem';
2
2
  import { IDesignItem } from '../../../item/IDesignItem';
3
- import { IExtensionManager } from '../../../widgets/designerView/extensions/IExtensionManger';
4
3
  export declare class DeleteAction implements ITransactionItem {
5
- constructor(deletedItems: IDesignItem[], extensionManager: IExtensionManager);
4
+ constructor(deletedItems: IDesignItem[]);
6
5
  title?: string;
7
6
  get affectedItems(): IDesignItem[];
8
7
  undo(): void;
9
8
  do(): void;
10
9
  deletedItems: IDesignItem[];
11
- extensionManager: IExtensionManager;
12
10
  private _parentItems;
13
11
  private _parentIndexes;
14
12
  mergeWith(other: ITransactionItem): boolean;
@@ -1,9 +1,8 @@
1
1
  import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper';
2
2
  export class DeleteAction {
3
- constructor(deletedItems, extensionManager) {
3
+ constructor(deletedItems) {
4
4
  this.title = "Delete Items";
5
5
  this.deletedItems = deletedItems;
6
- this.extensionManager = extensionManager;
7
6
  }
8
7
  title;
9
8
  get affectedItems() {
@@ -11,7 +10,7 @@ export class DeleteAction {
11
10
  }
12
11
  undo() {
13
12
  for (let n = 0; n < this.deletedItems.length; n++) {
14
- this._parentItems[n].insertChild(this.deletedItems[n], this._parentIndexes[n]);
13
+ this._parentItems[n]._insertChildInternal(this.deletedItems[n], this._parentIndexes[n]);
15
14
  }
16
15
  this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'added', designItems: this.deletedItems });
17
16
  }
@@ -25,11 +24,9 @@ export class DeleteAction {
25
24
  for (let n = 0; n < this.deletedItems.length; n++) {
26
25
  this.deletedItems[n].remove();
27
26
  }
28
- this.extensionManager.removeExtensions(this.deletedItems);
29
27
  this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'removed', designItems: this.deletedItems });
30
28
  }
31
29
  deletedItems;
32
- extensionManager;
33
30
  _parentItems;
34
31
  _parentIndexes;
35
32
  mergeWith(other) {
@@ -14,7 +14,7 @@ export class InsertAction {
14
14
  this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'removed', designItems: [this.newItem] });
15
15
  }
16
16
  do() {
17
- this.designItem.insertChild(this.newItem, this.index);
17
+ this.designItem._insertChildInternal(this.newItem, this.index);
18
18
  const prepService = this.designItem.serviceContainer.prepareElementsForDesignerService;
19
19
  if (prepService)
20
20
  requestAnimationFrame(() => prepService.prepareElementsForDesigner(this.newItem));
@@ -0,0 +1,16 @@
1
+ import { ITransactionItem } from '../ITransactionItem';
2
+ import { IDesignItem } from '../../../item/IDesignItem';
3
+ export declare class InsertChildAction implements ITransactionItem {
4
+ constructor(designItem: IDesignItem, newParent: IDesignItem, newIndex: number);
5
+ title?: string;
6
+ get affectedItems(): IDesignItem[];
7
+ undo(): void;
8
+ do(): void;
9
+ designItem: IDesignItem;
10
+ newParent: IDesignItem;
11
+ newIndex: number;
12
+ oldParent: IDesignItem;
13
+ oldIndex: number;
14
+ newItem: IDesignItem;
15
+ mergeWith(other: ITransactionItem): boolean;
16
+ }
@@ -0,0 +1,31 @@
1
+ export class InsertChildAction {
2
+ constructor(designItem, newParent, newIndex) {
3
+ this.title = "Move Item";
4
+ this.designItem = designItem;
5
+ this.newParent = newParent;
6
+ this.newIndex = newIndex;
7
+ }
8
+ title;
9
+ get affectedItems() {
10
+ return [this.designItem, this.newParent, this.oldParent];
11
+ }
12
+ undo() {
13
+ this.oldParent._insertChildInternal(this.designItem, this.newIndex);
14
+ this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'moved', designItems: [this.designItem] });
15
+ }
16
+ do() {
17
+ this.oldParent = this.designItem.parent;
18
+ this.oldIndex = this.designItem.parent.indexOf(this.designItem);
19
+ this.newParent._insertChildInternal(this.designItem, this.newIndex);
20
+ this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'moved', designItems: [this.designItem] });
21
+ }
22
+ designItem;
23
+ newParent;
24
+ newIndex;
25
+ oldParent;
26
+ oldIndex;
27
+ newItem;
28
+ mergeWith(other) {
29
+ return false;
30
+ }
31
+ }
@@ -0,0 +1,16 @@
1
+ import { ITransactionItem } from '../ITransactionItem';
2
+ import { IDesignItem } from '../../../item/IDesignItem';
3
+ export declare class MoveElementInDomAction implements ITransactionItem {
4
+ constructor(designItem: IDesignItem, newTarget: IDesignItem, newPosition: InsertPosition, oldTarget: IDesignItem, oldPosition: InsertPosition);
5
+ title?: string;
6
+ get affectedItems(): IDesignItem[];
7
+ undo(): void;
8
+ do(): void;
9
+ designItem: IDesignItem;
10
+ newTarget: IDesignItem;
11
+ newPosition: InsertPosition;
12
+ oldTarget: IDesignItem;
13
+ oldPosition: InsertPosition;
14
+ newItem: IDesignItem;
15
+ mergeWith(other: ITransactionItem): boolean;
16
+ }
@@ -0,0 +1,32 @@
1
+ export class MoveElementInDomAction {
2
+ constructor(designItem, newTarget, newPosition, oldTarget, oldPosition) {
3
+ this.title = "Move Item";
4
+ this.designItem = designItem;
5
+ this.newTarget = newTarget;
6
+ this.newPosition = newPosition;
7
+ this.oldTarget = oldTarget;
8
+ this.oldPosition = oldPosition;
9
+ }
10
+ title;
11
+ get affectedItems() {
12
+ return [this.designItem, this.newTarget, this.oldTarget];
13
+ }
14
+ undo() {
15
+ this.oldTarget.element.insertAdjacentElement(this.oldPosition, this.designItem.element);
16
+ this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'moved', designItems: [this.designItem] });
17
+ }
18
+ do() {
19
+ //this.newTarget.insertChild(this.designItem, )
20
+ this.newTarget.element.insertAdjacentElement(this.newPosition, this.designItem.element);
21
+ this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'moved', designItems: [this.designItem] });
22
+ }
23
+ designItem;
24
+ newTarget;
25
+ newPosition;
26
+ oldTarget;
27
+ oldPosition;
28
+ newItem;
29
+ mergeWith(other) {
30
+ return false;
31
+ }
32
+ }
@@ -1,5 +1,3 @@
1
- /// <reference types="jquery" />
2
- /// <reference types="jquery.fancytree" />
3
1
  import { BaseCustomWebComponentLazyAppend } from '@node-projects/base-custom-webcomponent';
4
2
  import { ServiceContainer } from '../../services/ServiceContainer.js';
5
3
  export declare class BindableObjectsBrowser extends BaseCustomWebComponentLazyAppend {
@@ -9,5 +7,5 @@ export declare class BindableObjectsBrowser extends BaseCustomWebComponentLazyAp
9
7
  constructor();
10
8
  ready(): Promise<void>;
11
9
  initialize(serviceContainer: ServiceContainer): Promise<void>;
12
- lazyLoad(event: JQueryEventObject, data: Fancytree.EventData): void;
10
+ private lazyLoad;
13
11
  }
@@ -19,7 +19,7 @@ export class CodeViewMonaco extends BaseCustomWebComponentLazyAppend {
19
19
  `;
20
20
  static template = html `
21
21
  <style>@import "./node_modules/monaco-editor/min/vs/editor/editor.main.css";</style>
22
- <div id="container" style="width: 100%; height: 100%;"></div>
22
+ <div id="container" style="width: 100%; height: 100%; position: absolute;"></div>
23
23
  `;
24
24
  executeCommand(command) {
25
25
  switch (command.type) {
@@ -65,9 +65,9 @@ export class CodeViewMonaco extends BaseCustomWebComponentLazyAppend {
65
65
  value: this.code,
66
66
  language: 'html',
67
67
  minimap: {
68
- //@ts-ignore
69
68
  size: 'fill'
70
- }
69
+ },
70
+ fixedOverflowWidgets: true
71
71
  });
72
72
  this._monacoEditor.layout();
73
73
  let changeContentListener = this._monacoEditor.getModel().onDidChangeContent(e => {
@@ -290,7 +290,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
290
290
  }
291
291
  handleDeleteCommand() {
292
292
  let items = this.instanceServiceContainer.selectionService.selectedElements;
293
- this.instanceServiceContainer.undoService.execute(new DeleteAction(items, this.extensionManager));
293
+ this.instanceServiceContainer.undoService.execute(new DeleteAction(items));
294
294
  this.instanceServiceContainer.selectionService.setSelectedElements(null);
295
295
  }
296
296
  initialize(serviceContainer) {
@@ -362,7 +362,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
362
362
  addDesignItems(designItems) {
363
363
  if (designItems) {
364
364
  for (let di of designItems) {
365
- this.rootDesignItem.insertChild(di);
365
+ this.rootDesignItem._insertChildInternal(di);
366
366
  }
367
367
  }
368
368
  const intializationService = this.serviceContainer.intializationService;
@@ -281,7 +281,7 @@ export class PointerTool {
281
281
  const newOffset = newContainerService.getElementOffset(newContainerElementDesignItem, this._actionStartedDesignItem);
282
282
  this._moveItemsOffset = { x: newOffset.x - oldOffset.x + this._moveItemsOffset.x, y: newOffset.y - oldOffset.y + this._moveItemsOffset.y };
283
283
  currentContainerService.leaveContainer(this._actionStartedDesignItem.parent, [this._actionStartedDesignItem]);
284
- newContainerElementDesignItem.insertChild(this._actionStartedDesignItem);
284
+ newContainerElementDesignItem._insertChildInternal(this._actionStartedDesignItem);
285
285
  const cp = { x: currentPoint.x - this._moveItemsOffset.x, y: currentPoint.y - this._moveItemsOffset.y };
286
286
  newContainerService.enterContainer(newContainerElementDesignItem, [this._actionStartedDesignItem]);
287
287
  newContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
package/dist/index.d.ts CHANGED
@@ -59,6 +59,7 @@ export * from "./elements/services/propertiesService/DefaultEditorTypesService.j
59
59
  export type { IEditorTypesService } from "./elements/services/propertiesService/IEditorTypesService.js";
60
60
  export type { IPropertiesService } from "./elements/services/propertiesService/IPropertiesService.js";
61
61
  export type { IProperty } from "./elements/services/propertiesService/IProperty.js";
62
+ export * from "./elements/services/propertiesService/services/PropertiesHelper.js";
62
63
  export * from "./elements/services/propertiesService/services/BaseCustomWebComponentPropertiesService.js";
63
64
  export * from "./elements/services/propertiesService/services/CommonPropertiesService.js";
64
65
  export * from "./elements/services/propertiesService/services/CssPropertiesService.js";
@@ -79,7 +80,7 @@ export * from "./elements/services/undoService/transactionItems/AttributeChangeA
79
80
  export * from "./elements/services/undoService/transactionItems/CssStyleChangeAction.js";
80
81
  export * from "./elements/services/undoService/transactionItems/DeleteAction.js";
81
82
  export * from "./elements/services/undoService/transactionItems/InsertAction.js";
82
- export * from "./elements/services/undoService/transactionItems/MoveElementInDomAction.js";
83
+ export * from "./elements/services/undoService/transactionItems/InsertChildAction.js";
83
84
  export * from "./elements/services/undoService/transactionItems/PropertyChangeAction.js";
84
85
  export * from "./elements/services/BaseServiceContainer.js";
85
86
  export * from "./elements/services/InstanceServiceContainer.js";
package/dist/index.js CHANGED
@@ -32,6 +32,7 @@ export * from "./elements/services/instanceService/DefaultInstanceService.js";
32
32
  export * from "./elements/services/instanceService/PrepareElementsForDesignerService.js";
33
33
  export * from "./elements/services/modelCommandService/DefaultModelCommandService.js";
34
34
  export * from "./elements/services/propertiesService/DefaultEditorTypesService.js";
35
+ export * from "./elements/services/propertiesService/services/PropertiesHelper.js";
35
36
  export * from "./elements/services/propertiesService/services/BaseCustomWebComponentPropertiesService.js";
36
37
  export * from "./elements/services/propertiesService/services/CommonPropertiesService.js";
37
38
  export * from "./elements/services/propertiesService/services/CssPropertiesService.js";
@@ -48,7 +49,7 @@ export * from "./elements/services/undoService/transactionItems/AttributeChangeA
48
49
  export * from "./elements/services/undoService/transactionItems/CssStyleChangeAction.js";
49
50
  export * from "./elements/services/undoService/transactionItems/DeleteAction.js";
50
51
  export * from "./elements/services/undoService/transactionItems/InsertAction.js";
51
- export * from "./elements/services/undoService/transactionItems/MoveElementInDomAction.js";
52
+ export * from "./elements/services/undoService/transactionItems/InsertChildAction.js";
52
53
  export * from "./elements/services/undoService/transactionItems/PropertyChangeAction.js";
53
54
  export * from "./elements/services/BaseServiceContainer.js";
54
55
  export * from "./elements/services/InstanceServiceContainer.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "A UI designer for Polymer apps",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.0.69",
4
+ "version": "0.0.73",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",
@@ -1,7 +0,0 @@
1
- import { IDesignerCanvas } from "./IDesignerCanvas.js";
2
- import { IDesignViewConfigButtonsProvider } from "./IDesignViewConfigButtonsProvider.js";
3
- import { DesignerView } from './designerView';
4
- export declare class DesignerViewUseOverlayScollbars implements IDesignViewConfigButtonsProvider {
5
- constructor();
6
- provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
7
- }
@@ -1,13 +0,0 @@
1
- //todo, element moving does not work atm, needs to be fixed
2
- export class DesignerViewUseOverlayScollbars {
3
- constructor() {
4
- }
5
- provideButtons(designerView, designerCanvas) {
6
- let externalCss = document.createElement('style');
7
- externalCss.innerHTML = '@import url("./node_modules/overlayscrollbars/css/OverlayScrollbars.min.css");';
8
- designerCanvas.shadowRoot.appendChild(externalCss);
9
- //@ts-ignore
10
- setTimeout(() => OverlayScrollbars([designerCanvas._outercanvas2], {}), 5000);
11
- return [];
12
- }
13
- }