@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.
Files changed (68) hide show
  1. package/dist/elements/controls/DesignerTabControl.d.ts +5 -1
  2. package/dist/elements/controls/DesignerTabControl.js +85 -8
  3. package/dist/elements/helper/CssCombiner.d.ts +1 -2
  4. package/dist/elements/item/Binding.d.ts +14 -0
  5. package/dist/elements/item/Binding.js +4 -0
  6. package/dist/elements/item/BindingMode.d.ts +4 -0
  7. package/dist/elements/item/BindingMode.js +5 -0
  8. package/dist/elements/item/BindingTarget.d.ts +8 -0
  9. package/dist/elements/item/BindingTarget.js +9 -0
  10. package/dist/elements/item/DesignItem.d.ts +4 -7
  11. package/dist/elements/item/DesignItem.js +0 -15
  12. package/dist/elements/item/IBinding copy.d.ts +14 -0
  13. package/dist/elements/item/IBinding copy.js +1 -0
  14. package/dist/elements/item/IBinding.d.ts +15 -0
  15. package/dist/elements/item/IBinding.js +1 -0
  16. package/dist/elements/item/IDesignItem.d.ts +4 -5
  17. package/dist/elements/services/DefaultServiceBootstrap.js +0 -3
  18. package/dist/elements/services/GlobalContext.d.ts +3 -0
  19. package/dist/elements/services/GlobalContext.js +4 -1
  20. package/dist/elements/services/ServiceContainer.js +1 -1
  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.d.ts +1 -1
  24. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.js +1 -1
  25. package/dist/elements/services/bindingsService/IBindingService.d.ts +3 -6
  26. package/dist/elements/services/bindingsService/SpecialTagsBindingService.d.ts +14 -0
  27. package/dist/elements/services/bindingsService/SpecialTagsBindingService.js +40 -0
  28. package/dist/elements/services/bindingsService/VueBindingsService.d.ts +0 -0
  29. package/dist/elements/services/bindingsService/VueBindingsService.js +7 -0
  30. package/dist/elements/services/elementAtPointService/ElementAtPointService.d.ts +2 -2
  31. package/dist/elements/services/htmlParserService/NodeHtmlParserService.d.ts +2 -0
  32. package/dist/elements/services/htmlParserService/NodeHtmlParserService.js +5 -21
  33. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.d.ts +9 -0
  34. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.js +100 -0
  35. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.d.ts +11 -0
  36. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.js +84 -0
  37. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.d.ts +9 -0
  38. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.js +83 -0
  39. package/dist/elements/services/propertiesService/services/CommonPropertiesService.d.ts +1 -1
  40. package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +1 -1
  41. package/dist/elements/services/propertiesService/services/CssPropertiesService.js +9 -1
  42. package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.d.ts +1 -1
  43. package/dist/elements/services/undoService/transactionItems/AttributeChangeAction.d.ts +1 -1
  44. package/dist/elements/widgets/designerView/designerCanvas.js +5 -1
  45. package/dist/elements/widgets/designerView/designerView.js +1 -0
  46. package/dist/elements/widgets/designerView/extensions/PositionExtension.js +12 -4
  47. package/dist/elements/widgets/designerView/tools/DrawElementTool.d.ts +2 -0
  48. package/dist/elements/widgets/designerView/tools/DrawElementTool.js +2 -0
  49. package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +2 -0
  50. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +2 -0
  51. package/dist/elements/widgets/designerView/tools/ITool.d.ts +2 -0
  52. package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.d.ts +2 -0
  53. package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +2 -0
  54. package/dist/elements/widgets/designerView/tools/PanTool.d.ts +2 -0
  55. package/dist/elements/widgets/designerView/tools/PanTool.js +2 -0
  56. package/dist/elements/widgets/designerView/tools/PickColorTool.d.ts +2 -0
  57. package/dist/elements/widgets/designerView/tools/PickColorTool.js +12 -16
  58. package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +2 -0
  59. package/dist/elements/widgets/designerView/tools/PointerTool.js +2 -0
  60. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.d.ts +2 -0
  61. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +2 -0
  62. package/dist/elements/widgets/designerView/tools/TextTool.d.ts +2 -0
  63. package/dist/elements/widgets/designerView/tools/TextTool.js +2 -0
  64. package/dist/elements/widgets/designerView/tools/ZoomTool.d.ts +2 -0
  65. package/dist/elements/widgets/designerView/tools/ZoomTool.js +2 -0
  66. package/dist/index.d.ts +5 -1
  67. package/dist/index.js +2 -0
  68. package/package.json +6 -7
@@ -1,4 +1,4 @@
1
- import { BaseCustomWebComponentLazyAppend, TypedEvent } from "@node-projects/base-custom-webcomponent";
1
+ import { BaseCustomWebComponentLazyAppend, TypedEvent } from '@node-projects/base-custom-webcomponent';
2
2
  export declare type DesignerTabControlIndexChangedEventArgs = {
3
3
  newIndex: number;
4
4
  oldIndex?: number;
@@ -9,8 +9,12 @@ export declare class DesignerTabControl extends BaseCustomWebComponentLazyAppend
9
9
  private _contentObserver;
10
10
  private _panels;
11
11
  private _headerDiv;
12
+ private _moreDiv;
13
+ private _moreContainer;
14
+ private _elementMap;
12
15
  static readonly style: CSSStyleSheet;
13
16
  constructor();
17
+ private _showHideHeaderItems;
14
18
  connectedCallback(): void;
15
19
  get selectedIndex(): number;
16
20
  set selectedIndex(value: number);
@@ -1,8 +1,9 @@
1
- import { BaseCustomWebComponentLazyAppend, css, TypedEvent } from "@node-projects/base-custom-webcomponent";
1
+ import { BaseCustomWebComponentLazyAppend, css, TypedEvent, DomHelper } from '@node-projects/base-custom-webcomponent';
2
2
  export class DesignerTabControl extends BaseCustomWebComponentLazyAppend {
3
3
  constructor() {
4
4
  super();
5
5
  this._selectedIndex = -1;
6
+ this._elementMap = new WeakMap();
6
7
  this.onSelectedTabChanged = new TypedEvent();
7
8
  this._contentObserver = new MutationObserver(() => {
8
9
  this._createItems();
@@ -13,12 +14,45 @@ export class DesignerTabControl extends BaseCustomWebComponentLazyAppend {
13
14
  this._headerDiv = document.createElement("div");
14
15
  this._headerDiv.className = 'header';
15
16
  outerDiv.appendChild(this._headerDiv);
17
+ this._moreDiv = document.createElement("div");
18
+ this._moreDiv.className = "header header-more";
19
+ this._moreDiv.innerText = "<<";
20
+ outerDiv.appendChild(this._moreDiv);
21
+ this._moreContainer = document.createElement("div");
22
+ this._moreContainer.className = "more-container";
23
+ this._moreContainer.style.visibility = "hidden";
24
+ outerDiv.appendChild(this._moreContainer);
25
+ this._moreDiv.onclick = () => {
26
+ if (this._moreContainer.children.length && this._moreContainer.style.visibility == "hidden")
27
+ this._moreContainer.style.visibility = 'visible';
28
+ else
29
+ this._moreContainer.style.visibility = "hidden";
30
+ };
16
31
  this._panels = document.createElement("div");
17
32
  this._panels.className = 'panels';
18
33
  outerDiv.appendChild(this._panels);
19
34
  let _slot = document.createElement("slot");
20
35
  _slot.name = 'panels';
21
36
  this._panels.appendChild(_slot);
37
+ const resizeObserver = new ResizeObserver(entries => {
38
+ this._showHideHeaderItems();
39
+ });
40
+ resizeObserver.observe(this._headerDiv);
41
+ }
42
+ _showHideHeaderItems() {
43
+ this._moreContainer.style.visibility = "hidden";
44
+ let w = 0;
45
+ DomHelper.removeAllChildnodes(this._moreContainer);
46
+ DomHelper.removeAllChildnodes(this._headerDiv);
47
+ for (let item of this.children) {
48
+ let htmlItem = item;
49
+ const tabHeaderDiv = this._elementMap.get(htmlItem);
50
+ this._moreContainer.appendChild(tabHeaderDiv);
51
+ if (w < this._headerDiv.clientWidth) {
52
+ this._headerDiv.appendChild(tabHeaderDiv);
53
+ w += tabHeaderDiv.clientWidth;
54
+ }
55
+ }
22
56
  }
23
57
  connectedCallback() {
24
58
  this._createItems();
@@ -35,7 +69,7 @@ export class DesignerTabControl extends BaseCustomWebComponentLazyAppend {
35
69
  set selectedIndex(value) {
36
70
  let old = this._selectedIndex;
37
71
  this._selectedIndex = value;
38
- if (this._headerDiv.children.length)
72
+ if (this.children.length)
39
73
  this._selectedIndexChanged(old);
40
74
  }
41
75
  disconnectedCallback() {
@@ -55,10 +89,13 @@ export class DesignerTabControl extends BaseCustomWebComponentLazyAppend {
55
89
  this._selectedIndex = j;
56
90
  if (this._headerDiv.children.length)
57
91
  this._selectedIndexChanged(old, true);
92
+ this._moreContainer.style.visibility = 'hidden';
58
93
  };
94
+ this._elementMap.set(htmlItem, tabHeaderDiv);
59
95
  this._headerDiv.appendChild(tabHeaderDiv);
60
96
  i++;
61
97
  }
98
+ this._showHideHeaderItems();
62
99
  this._selectedIndexChanged();
63
100
  }
64
101
  _selectedIndexChanged(oldIndex, viaClick = false) {
@@ -66,16 +103,25 @@ export class DesignerTabControl extends BaseCustomWebComponentLazyAppend {
66
103
  const element = this.children[index];
67
104
  if (index == this._selectedIndex) {
68
105
  element.slot = "panels";
69
- this._headerDiv.children[index].classList.add('selected');
70
- if (element.activated)
71
- element.activated();
106
+ const el = this.children[index];
107
+ const headerEl = this._elementMap.get(el);
108
+ if (headerEl) {
109
+ headerEl.classList.add('selected');
110
+ if (element.activated)
111
+ element.activated();
112
+ }
72
113
  }
73
114
  else {
74
115
  element.removeAttribute("slot");
75
- this._headerDiv.children[index].classList.remove('selected');
116
+ const el = this.children[index];
117
+ const headerEl = this._elementMap.get(el);
118
+ if (headerEl) {
119
+ headerEl.classList.remove('selected');
120
+ }
76
121
  }
77
122
  }
78
123
  this.onSelectedTabChanged.emit({ newIndex: this._selectedIndex, oldIndex: oldIndex, changedViaClick: viaClick });
124
+ this._moreContainer.style.visibility = 'hidden';
79
125
  }
80
126
  }
81
127
  DesignerTabControl.style = css `
@@ -93,14 +139,46 @@ DesignerTabControl.style = css `
93
139
  flex-direction: row;
94
140
  cursor: pointer;
95
141
  height: 30px;
142
+ width: calc(100% - 30px);
96
143
  background-color: var(--dark-grey, #232733);
97
144
  overflow-x: auto;
98
145
  scrollbar-width: none; /* Firefox */
99
146
  }
147
+ .header-more {
148
+ right: 0;
149
+ top: 0;
150
+ width: 30px;
151
+ position: absolute;
152
+ color: white;
153
+ display: flex;
154
+ justify-content: center;
155
+ align-items: center;
156
+ font-family: cursive;
157
+ }
158
+ .header-more:hover {
159
+ background: var(--light-grey, #383f52);
160
+ }
161
+ .more-container {
162
+ z-index: 1;
163
+ user-select: none;
164
+ background-color: var(--dark-grey, #232733);
165
+ right: 0;
166
+ top: 30px;
167
+ position: absolute;
168
+ color: white;
169
+ display: flex;
170
+ flex-direction: column;
171
+ align-items: flex-start;
172
+ cursor: pointer;
173
+ }
174
+ .more-container .tab-header {
175
+ width: 100%;
176
+ }
100
177
  .header::-webkit-scrollbar {
101
178
  display: none; /* Safari and Chrome */
102
179
  }
103
180
  .tab-header {
181
+ height: 30px;
104
182
  font-family: Arial;
105
183
  display: flex;
106
184
  justify-content: center;
@@ -114,17 +192,16 @@ DesignerTabControl.style = css `
114
192
  font-weight: 500;
115
193
  line-height: 1.5;
116
194
  letter-spacing: 1px;
117
-
118
195
  }
119
196
  .tab-header:hover {
120
197
  background: var(--light-grey, #383f52);
121
198
  }
122
199
  .selected {
123
- pointer-events: none;
124
200
  background: var(--medium-grey, #2f3545);
125
201
  box-shadow: inset 0 3px 0 var(--highlight-pink, #e91e63);
126
202
  }
127
203
  .panels {
204
+ z-index: 0;
128
205
  background: var(--medium-grey, #2f3545);
129
206
  height: calc(100% - 30px);
130
207
  }
@@ -1,7 +1,6 @@
1
- import { IBinding } from "../services/bindingsService/IBinding";
2
1
  export declare class CssCombiner {
3
2
  private static _helperElement;
4
- static combine(styles: Map<string, string | IBinding>, globalStyles?: Map<string, string>): Map<string, string | IBinding>;
3
+ static combine(styles: Map<string, string>, globalStyles?: Map<string, string>): Map<string, string>;
5
4
  private static combineBorder;
6
5
  private static combineMargin;
7
6
  private static combinePadding;
@@ -0,0 +1,14 @@
1
+ import { BindingMode } from "./BindingMode";
2
+ import { BindingTarget } from "./BindingTarget";
3
+ export interface IBinding {
4
+ bindableObjectNames?: string[];
5
+ expression?: string;
6
+ mode?: BindingMode;
7
+ target?: BindingTarget;
8
+ invert?: boolean;
9
+ converter?: string;
10
+ changedEvent?: string;
11
+ nullSafe?: boolean;
12
+ rawName?: string;
13
+ rawValue?: string;
14
+ }
@@ -0,0 +1,4 @@
1
+ export class Binding {
2
+ }
3
+ export class ExtendedBinding extends Binding {
4
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum BindingMode {
2
+ oneWay = "oneWay",
3
+ twoWay = "twoWay"
4
+ }
@@ -0,0 +1,5 @@
1
+ export var BindingMode;
2
+ (function (BindingMode) {
3
+ BindingMode["oneWay"] = "oneWay";
4
+ BindingMode["twoWay"] = "twoWay";
5
+ })(BindingMode || (BindingMode = {}));
@@ -0,0 +1,8 @@
1
+ export declare enum BindingTarget {
2
+ property = "property",
3
+ attribute = "attribute",
4
+ class = "class",
5
+ css = "css",
6
+ event = "event",
7
+ content = "content"
8
+ }
@@ -0,0 +1,9 @@
1
+ export var BindingTarget;
2
+ (function (BindingTarget) {
3
+ BindingTarget["property"] = "property";
4
+ BindingTarget["attribute"] = "attribute";
5
+ BindingTarget["class"] = "class";
6
+ BindingTarget["css"] = "css";
7
+ BindingTarget["event"] = "event";
8
+ BindingTarget["content"] = "content"; //innertext or html... mhmmm
9
+ })(BindingTarget || (BindingTarget = {}));
@@ -5,7 +5,6 @@ import { ChangeGroup } from '../services/undoService/ChangeGroup';
5
5
  import { NodeType } from './NodeType';
6
6
  import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType';
7
7
  import { IDesignerExtension } from '../widgets/designerView/extensions/IDesignerExtension';
8
- import { IBinding } from '../services/bindingsService/IBinding.js';
9
8
  export declare class DesignItem implements IDesignItem {
10
9
  node: Node;
11
10
  serviceContainer: ServiceContainer;
@@ -14,9 +13,9 @@ export declare class DesignItem implements IDesignItem {
14
13
  replaceNode(newNode: Node): void;
15
14
  get nodeType(): NodeType;
16
15
  get hasAttributes(): boolean;
17
- attributes: Map<string, string | IBinding>;
16
+ attributes: Map<string, string>;
18
17
  get hasStyles(): boolean;
19
- styles: Map<string, string | IBinding>;
18
+ styles: Map<string, string>;
20
19
  private static _designItemMap;
21
20
  get element(): Element;
22
21
  get name(): string;
@@ -51,10 +50,8 @@ export declare class DesignItem implements IDesignItem {
51
50
  getOrCreateDesignItem(node: Node): IDesignItem;
52
51
  static GetOrCreateDesignItem(node: Node, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): IDesignItem;
53
52
  static GetDesignItem(node: Node): IDesignItem;
54
- setStyle(name: keyof CSSStyleDeclaration, value?: string | IBinding | null): void;
53
+ setStyle(name: keyof CSSStyleDeclaration, value?: string | null): void;
55
54
  removeStyle(name: keyof CSSStyleDeclaration): void;
56
- setAttribute(name: string, value?: string | IBinding | null): void;
55
+ setAttribute(name: string, value?: string | null): void;
57
56
  removeAttribute(name: string): void;
58
- setProperty(name: string, value?: string | null): void;
59
- removeProperty(name: string, value?: string | null): void;
60
57
  }
@@ -1,7 +1,6 @@
1
1
  import { CssStyleChangeAction } from '../services/undoService/transactionItems/CssStyleChangeAction';
2
2
  import { NodeType } from './NodeType';
3
3
  import { AttributeChangeAction } from '../services/undoService/transactionItems/AttributeChangeAction';
4
- import { PropertyChangeAction } from '../services/undoService/transactionItems/PropertyChangeAction';
5
4
  import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper';
6
5
  import { CssAttributeParser } from '../helper/CssAttributeParser.js';
7
6
  const hideAtDesignTimeAttributeName = 'node-projects-hide-at-design-time';
@@ -236,19 +235,5 @@ export class DesignItem {
236
235
  const action = new AttributeChangeAction(this, name, null, this.attributes.get(name));
237
236
  this.instanceServiceContainer.undoService.execute(action);
238
237
  }
239
- setProperty(name, value) {
240
- const propService = this.serviceContainer.getLastServiceWhere('propertyService', x => x.isHandledElement(this));
241
- const property = propService.getProperty(this, name);
242
- const oldValue = propService.getValue([this], property);
243
- const action = new PropertyChangeAction(this, property, value, oldValue);
244
- this.instanceServiceContainer.undoService.execute(action);
245
- }
246
- removeProperty(name, value) {
247
- const propService = this.serviceContainer.getLastServiceWhere('propertyService', x => x.isHandledElement(this));
248
- const property = propService.getProperty(this, name);
249
- const oldValue = propService.getValue([this], property);
250
- const action = new PropertyChangeAction(this, property, undefined, oldValue);
251
- this.instanceServiceContainer.undoService.execute(action);
252
- }
253
238
  }
254
239
  DesignItem._designItemMap = new WeakMap();
@@ -0,0 +1,14 @@
1
+ import { BindingMode } from "./BindingMode";
2
+ import { BindingTarget } from "./BindingTarget";
3
+ export interface IBinding {
4
+ bindableObjectNames?: string[];
5
+ expression?: string;
6
+ mode?: BindingMode;
7
+ target?: BindingTarget;
8
+ invert?: boolean;
9
+ converter?: string;
10
+ changedEvent?: string;
11
+ nullSafe?: boolean;
12
+ rawName?: string;
13
+ rawValue?: string;
14
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import { BindingMode } from "./BindingMode";
2
+ import { BindingTarget } from "./BindingTarget";
3
+ export interface IBinding {
4
+ targetName?: string;
5
+ target?: BindingTarget;
6
+ rawName?: string;
7
+ rawValue?: string;
8
+ type?: string;
9
+ expression?: string;
10
+ bindableObjectNames?: string[];
11
+ mode?: BindingMode;
12
+ invert?: boolean;
13
+ changedEvent?: string;
14
+ nullSafe?: boolean;
15
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -4,16 +4,15 @@ import { ChangeGroup } from "../services/undoService/ChangeGroup";
4
4
  import { NodeType } from './NodeType';
5
5
  import { ExtensionType } from "../widgets/designerView/extensions/ExtensionType";
6
6
  import { IDesignerExtension } from "../widgets/designerView/extensions/IDesignerExtension";
7
- import { IBinding } from "../services/bindingsService/IBinding";
8
7
  export interface IDesignItem {
9
8
  replaceNode(newNode: Node): any;
10
9
  readonly nodeType: NodeType;
11
10
  readonly name: string;
12
11
  readonly id: string;
13
12
  readonly hasAttributes: boolean;
14
- readonly attributes: Map<string, string | IBinding>;
13
+ readonly attributes: Map<string, string>;
15
14
  readonly hasStyles: boolean;
16
- readonly styles: Map<string, string | IBinding>;
15
+ readonly styles: Map<string, string>;
17
16
  readonly hasChildren: boolean;
18
17
  children(): IterableIterator<IDesignItem>;
19
18
  readonly childCount: number;
@@ -33,9 +32,9 @@ export interface IDesignItem {
33
32
  appliedDesignerExtensions: Map<ExtensionType, IDesignerExtension[]>;
34
33
  getOrCreateDesignItem(node: Node): any;
35
34
  openGroup(title: string, affectedItems?: IDesignItem[]): ChangeGroup;
36
- setStyle(name: keyof CSSStyleDeclaration, value?: string | IBinding | null): any;
35
+ setStyle(name: keyof CSSStyleDeclaration, value?: string | null): any;
37
36
  removeStyle(name: keyof CSSStyleDeclaration): any;
38
- setAttribute(name: string, value?: string | IBinding | null): any;
37
+ setAttribute(name: string, value?: string | null): any;
39
38
  removeAttribute(name: string): any;
40
39
  hideAtDesignTime: boolean;
41
40
  hideAtRunTime: boolean;
@@ -35,7 +35,6 @@ import { TextTool } from '../widgets/designerView/tools/TextTool.js';
35
35
  import { GrayOutExtensionProvider } from '../widgets/designerView/extensions/GrayOutExtensionProvider.js';
36
36
  import { AltToEnterContainerExtensionProvider } from '../widgets/designerView/extensions/AltToEnterContainerExtensionProvider.js';
37
37
  import { InvisibleDivExtensionProvider } from '../widgets/designerView/extensions/InvisibleDivExtensionProvider.js';
38
- //import { PolymerBindingsService } from './bindingsService/PolymerBindingsService.js';
39
38
  import { ItemsBelowContextMenu } from '../widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.js';
40
39
  import { GridPlacementService } from './placementService/GridPlacementService.js';
41
40
  import { ElementAtPointService } from './elementAtPointService/ElementAtPointService';
@@ -44,7 +43,6 @@ import { SnaplinesProviderService } from './placementService/SnaplinesProviderSe
44
43
  import { PrepareElementsForDesignerService } from './instanceService/PrepareElementsForDesignerService';
45
44
  import { DragDropService } from './dragDropService/DragDropService';
46
45
  import { EditTextExtensionProvider } from '../widgets/designerView/extensions/EditText/EditTextExtensionProvider.js';
47
- import { BaseCustomeWebcomponentBindingsService } from './bindingsService/BaseCustomeWebcomponentBindingsService';
48
46
  export function createDefaultServiceContainer() {
49
47
  let serviceContainer = new ServiceContainer();
50
48
  serviceContainer.register("propertyService", new PolymerPropertiesService());
@@ -60,7 +58,6 @@ export function createDefaultServiceContainer() {
60
58
  serviceContainer.register("containerService", new FlexBoxPlacementService());
61
59
  serviceContainer.register("snaplinesProviderService", new SnaplinesProviderService());
62
60
  serviceContainer.register("htmlParserService", new DefaultHtmlParserService());
63
- serviceContainer.register("bindingService", new BaseCustomeWebcomponentBindingsService());
64
61
  serviceContainer.register("elementAtPointService", new ElementAtPointService());
65
62
  serviceContainer.register("prepareElementsForDesignerService", new PrepareElementsForDesignerService());
66
63
  serviceContainer.register("dragDropService", new DragDropService());
@@ -1,9 +1,12 @@
1
1
  import { PropertyChangedArgs, TypedEvent } from "@node-projects/base-custom-webcomponent";
2
2
  import { ITool } from "../widgets/designerView/tools/ITool";
3
+ import { ServiceContainer } from './ServiceContainer';
3
4
  export declare class GlobalContext {
5
+ private _serviceContainer;
4
6
  private _tool;
5
7
  private _strokeColor;
6
8
  private _fillBrush;
9
+ constructor(serviceContainer: ServiceContainer);
7
10
  set tool(tool: ITool);
8
11
  get tool(): ITool;
9
12
  readonly onToolChanged: TypedEvent<PropertyChangedArgs<ITool>>;
@@ -2,13 +2,14 @@
2
2
  //Service container should not be something with changeing information, so global context is for tool and color (and maybe more)
3
3
  import { PropertyChangedArgs, TypedEvent } from "@node-projects/base-custom-webcomponent";
4
4
  export class GlobalContext {
5
- constructor() {
5
+ constructor(serviceContainer) {
6
6
  this._strokeColor = 'black';
7
7
  this._fillBrush = 'transparent';
8
8
  this.onToolChanged = new TypedEvent();
9
9
  this.finishedWithTool = () => this.tool = null;
10
10
  this.onStrokeColorChanged = new TypedEvent();
11
11
  this.onFillBrushChanged = new TypedEvent();
12
+ this._serviceContainer = serviceContainer;
12
13
  }
13
14
  set tool(tool) {
14
15
  if (this._tool !== tool) {
@@ -17,6 +18,8 @@ export class GlobalContext {
17
18
  oldTool.dispose();
18
19
  this._tool = tool;
19
20
  this.onToolChanged.emit(new PropertyChangedArgs(tool, oldTool));
21
+ if (this._tool)
22
+ this._tool.activated(this._serviceContainer);
20
23
  }
21
24
  }
22
25
  get tool() {
@@ -10,7 +10,7 @@ export class ServiceContainer extends BaseServiceContainer {
10
10
  demoViewWidget: DemoView
11
11
  };
12
12
  this.designerExtensions = new Map();
13
- this.globalContext = new GlobalContext();
13
+ this.globalContext = new GlobalContext(this);
14
14
  this.designerTools = new Map();
15
15
  }
16
16
  get bindingService() {
@@ -0,0 +1,8 @@
1
+ import { IDesignItem } from "../../item/IDesignItem";
2
+ import { IBinding } from '../../item/IBinding';
3
+ import { IBindingService } from "./IBindingService";
4
+ export declare class BaseCustomWebcomponentBindingsService implements IBindingService {
5
+ static type: string;
6
+ getBindings(designItem: IDesignItem): IBinding[];
7
+ setBinding(designItem: IDesignItem, binding: IBinding): boolean;
8
+ }
@@ -0,0 +1,69 @@
1
+ import { BindingMode } from '../../item/BindingMode';
2
+ import { BindingTarget } from "../../item/BindingTarget.js";
3
+ export class BaseCustomWebcomponentBindingsService {
4
+ getBindings(designItem) {
5
+ let bindings = null;
6
+ for (let a of designItem.attributes) {
7
+ const name = a[0];
8
+ const value = a[1];
9
+ if ((value.startsWith('[[') || value.startsWith('{{')) && (value.endsWith('}}') || value.endsWith(']]'))) {
10
+ if (!bindings)
11
+ bindings = [];
12
+ let bnd = { rawName: name, rawValue: value };
13
+ if (a[0].startsWith('css:')) {
14
+ bnd.targetName = name.substring(4);
15
+ bnd.target = BindingTarget.css;
16
+ bnd.expression = value.substring(2, value.length - 4);
17
+ }
18
+ else if (a[0].startsWith('class:')) {
19
+ bnd.targetName = name.substring(4);
20
+ bnd.target = BindingTarget.class;
21
+ bnd.expression = value.substring(2, value.length - 4);
22
+ }
23
+ else if (a[0].startsWith('$')) {
24
+ bnd.targetName = name.substring(1);
25
+ bnd.target = BindingTarget.attribute;
26
+ bnd.expression = value.substring(2, value.length - 4);
27
+ }
28
+ else if (a[0].startsWith('@')) {
29
+ bnd.targetName = name.substring(1);
30
+ bnd.target = BindingTarget.event;
31
+ bnd.expression = value.substring(2, value.length - 4);
32
+ }
33
+ else {
34
+ bnd.targetName = name;
35
+ bnd.target = BindingTarget.property;
36
+ bnd.expression = value.substring(2, value.length - 4);
37
+ }
38
+ bnd.type = BaseCustomWebcomponentBindingsService.type;
39
+ bnd.targetName = bnd.targetName;
40
+ bindings.push(bnd);
41
+ }
42
+ }
43
+ return bindings;
44
+ }
45
+ setBinding(designItem, binding) {
46
+ if (binding.type !== BaseCustomWebcomponentBindingsService.type)
47
+ return false;
48
+ let nm = '';
49
+ switch (binding.target) {
50
+ case BindingTarget.css:
51
+ nm += 'css:';
52
+ break;
53
+ case BindingTarget.class:
54
+ nm += 'class';
55
+ break;
56
+ case BindingTarget.attribute:
57
+ nm += '$';
58
+ break;
59
+ case BindingTarget.event:
60
+ nm += '@';
61
+ break;
62
+ }
63
+ nm += binding.targetName;
64
+ let value = (binding.mode == BindingMode.oneWay ? '[[' : '{{') + binding.expression + (binding.mode == BindingMode.oneWay ? ']]' : '}}');
65
+ designItem.setAttribute(nm, value);
66
+ return true;
67
+ }
68
+ }
69
+ BaseCustomWebcomponentBindingsService.type = 'base-custom-webcomponent-binding';
@@ -1,6 +1,6 @@
1
1
  import { IndentedTextWriter } from "../../helper/IndentedTextWriter";
2
2
  import { IDesignItem } from "../../item/IDesignItem";
3
- import { IBinding } from "./IBinding";
3
+ import { IBinding } from "../../item/IBinding";
4
4
  import { IBindingService } from "./IBindingService";
5
5
  export declare class BaseCustomeWebcomponentBindingsService implements IBindingService {
6
6
  writeBindingMode: 'direct';
@@ -1,5 +1,5 @@
1
1
  import { DomConverter } from "../../widgets/designerView/DomConverter";
2
- import { BindingMode } from './BindingMode';
2
+ import { BindingMode } from '../../item/BindingMode';
3
3
  import { BindingTarget } from './BindingTarget';
4
4
  export class BaseCustomeWebcomponentBindingsService {
5
5
  constructor() {
@@ -1,14 +1,11 @@
1
- import { IndentedTextWriter } from "../../helper/IndentedTextWriter";
2
1
  import { IDesignItem } from "../../item/IDesignItem";
3
- import { IBinding } from "./IBinding";
2
+ import { IBinding } from "../../item/IBinding";
4
3
  /**
5
4
  * Can be used to parse bindings wich are done via special HTML Attributes or special Elements
6
5
  * If your Bindings are to special, or HTML is not valid with them, maybe you need to parse the Bindings already in the
7
6
  * htmlParserService
8
7
  */
9
8
  export interface IBindingService {
10
- writeBindingMode: 'none' | 'direct' | 'afterElement';
11
- parseBindingAttribute(attributeName: string, value: string): IBinding;
12
- parseBindingCss(attributeName: string, value: string): IBinding;
13
- writeBinding(indentedTextWriter: IndentedTextWriter, designItem: IDesignItem, type: 'style' | 'attribute', keyValuePair: [key: string, value: IBinding]): boolean;
9
+ getBindings(designItem: IDesignItem): IBinding[];
10
+ setBinding(designItem: IDesignItem, binding: IBinding): boolean;
14
11
  }
@@ -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