@node-projects/web-component-designer 0.1.124 → 0.1.125

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.
@@ -70,7 +70,11 @@ export declare class DesignItem implements IDesignItem {
70
70
  static createDesignItemFromInstance(node: Node, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): DesignItem;
71
71
  querySelectorAll(selectors: string): NodeListOf<HTMLElement>;
72
72
  removeDesignerAttributesAndStylesFromChildren(): void;
73
- updateChildrenFromNodesChildren(): void;
73
+ _internalUpdateChildrenFromNodesChildren(): any[];
74
+ _backupWhenEditContent: any;
75
+ _inEditContent: boolean;
76
+ editContent(): void;
77
+ editContentFinish(): void;
74
78
  constructor(node: Node, parsedNode: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer);
75
79
  setView(node: Element): void;
76
80
  openGroup(title: string): ChangeGroup;
@@ -339,7 +339,10 @@ export class DesignItem {
339
339
  }
340
340
  node.draggable = false; //even if it should be true, for better designer exp.
341
341
  }
342
- designItem.updateChildrenFromNodesChildren();
342
+ designItem._childArray = designItem._internalUpdateChildrenFromNodesChildren();
343
+ for (let c of designItem._childArray) {
344
+ c._parent = designItem;
345
+ }
343
346
  return designItem;
344
347
  }
345
348
  querySelectorAll(selectors) {
@@ -360,25 +363,44 @@ export class DesignItem {
360
363
  e.style.pointerEvents = '';
361
364
  }
362
365
  }
363
- updateChildrenFromNodesChildren() {
364
- this._childArray = [];
366
+ _internalUpdateChildrenFromNodesChildren() {
367
+ const newChilds = [];
365
368
  if (this.nodeType == NodeType.Element) {
366
369
  if (this.element instanceof HTMLTemplateElement) {
367
370
  for (const c of this.element.content.childNodes) {
368
371
  const di = DesignItem.createDesignItemFromInstance(c, this.serviceContainer, this.instanceServiceContainer);
369
- this._childArray.push(di);
370
- di._parent = this;
372
+ newChilds.push(di);
371
373
  }
372
374
  }
373
375
  else {
374
376
  for (const c of this.element.childNodes) {
375
377
  const di = DesignItem.createDesignItemFromInstance(c, this.serviceContainer, this.instanceServiceContainer);
376
- this._childArray.push(di);
377
- di._parent = this;
378
+ newChilds.push(di);
378
379
  }
379
380
  }
380
381
  }
381
- this._refreshIfStyleSheet();
382
+ return newChilds;
383
+ }
384
+ _backupWhenEditContent;
385
+ _inEditContent = false;
386
+ editContent() {
387
+ this._inEditContent = true;
388
+ this._backupWhenEditContent = [...this.element.childNodes];
389
+ const nn = this.element.innerHTML;
390
+ this.element.innerHTML = '';
391
+ this.element.innerHTML = nn;
392
+ this.element.setAttribute('contenteditable', '');
393
+ }
394
+ editContentFinish() {
395
+ if (this._inEditContent) {
396
+ this._inEditContent = false;
397
+ this.element.removeAttribute('contenteditable');
398
+ this.element.innerHTML = '';
399
+ for (let n of this._backupWhenEditContent) {
400
+ this.element.appendChild(n);
401
+ }
402
+ this._backupWhenEditContent = null;
403
+ }
382
404
  }
383
405
  constructor(node, parsedNode, serviceContainer, instanceServiceContainer) {
384
406
  this.node = node;
@@ -37,7 +37,8 @@ export interface IDesignItem {
37
37
  remove(): any;
38
38
  clearChildren(): any;
39
39
  removeDesignerAttributesAndStylesFromChildren(): any;
40
- updateChildrenFromNodesChildren(): any;
40
+ editContent(): any;
41
+ editContentFinish(): any;
41
42
  readonly hasContent: boolean;
42
43
  content: string;
43
44
  innerHTML?: string;
@@ -10,6 +10,7 @@ export declare class EditTextExtension extends AbstractExtension implements hand
10
10
  private _foreignObject;
11
11
  private _path;
12
12
  private _toolbar;
13
+ private _selectionChangedListener;
13
14
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
14
15
  extend(): void;
15
16
  refresh(): void;
@@ -35,6 +35,7 @@ export class EditTextExtension extends AbstractExtension {
35
35
  _foreignObject;
36
36
  _path;
37
37
  _toolbar;
38
+ _selectionChangedListener;
38
39
  constructor(extensionManager, designerView, extendedItem) {
39
40
  super(extensionManager, designerView, extendedItem);
40
41
  }
@@ -44,6 +45,12 @@ export class EditTextExtension extends AbstractExtension {
44
45
  this.extendedItem.instanceServiceContainer.selectionService.clearSelectedElements();
45
46
  this.extendedItem.removeDesignerAttributesAndStylesFromChildren();
46
47
  this.extendedItem.element.setAttribute('contenteditable', '');
48
+ //@ts-ignore
49
+ this.extendedItem.editContent();
50
+ this._selectionChangedListener = this.extendedItem.instanceServiceContainer.selectionService.onSelectionChanged.on(() => {
51
+ this.commitchanges();
52
+ this.extensionManager.removeExtensionInstance(this.extendedItem, this);
53
+ });
47
54
  this.extendedItem.element.focus();
48
55
  let itemRect = this.extendedItem.element.getBoundingClientRect();
49
56
  this._toolbar = this.createToolbar(EditTextExtension.template, 300, 24);
@@ -80,14 +87,16 @@ export class EditTextExtension extends AbstractExtension {
80
87
  this._path.setAttribute("d", data);
81
88
  }
82
89
  dispose() {
90
+ this._selectionChangedListener.dispose();
83
91
  this._removeAllOverlays();
84
- this.extendedItem.element.removeAttribute('contenteditable');
92
+ this.extendedItem.editContentFinish();
85
93
  this.designerCanvas.clickOverlay.style.pointerEvents = 'auto';
86
94
  }
87
95
  commitchanges() {
88
96
  this._removeAllOverlays();
89
- this.extendedItem.element.removeAttribute('contenteditable');
90
- this.extendedItem.updateChildrenFromNodesChildren();
97
+ const newHTML = this.extendedItem.element.innerHTML;
98
+ this.extendedItem.editContentFinish();
99
+ this.extendedItem.innerHTML = newHTML;
91
100
  this.designerCanvas.clickOverlay.style.pointerEvents = 'auto';
92
101
  }
93
102
  handlesPointerEvent(designerCanvas, event, currentElement) {
@@ -2,6 +2,8 @@ import { EditTextExtension } from "./EditTextExtension.js";
2
2
  import { css } from '@node-projects/base-custom-webcomponent';
3
3
  export class EditTextExtensionProvider {
4
4
  shouldExtend(extensionManager, designerView, designItem) {
5
+ if (designItem.isRootItem)
6
+ return false;
5
7
  if (designItem.name === 'input')
6
8
  return false;
7
9
  return true;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "A WYSIWYG designer webcomponent for html components",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.1.124",
4
+ "version": "0.1.125",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",