@node-projects/web-component-designer-visualization-addons 0.1.115 → 0.1.117

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.
@@ -8,7 +8,7 @@ export class BindingsEditor extends BaseCustomWebComponentConstructorAppend {
8
8
  <div style="grid-column: 1/3">
9
9
  <div style="display: flex; flex-direction: column;">
10
10
  <div class="row">
11
- <span style="cursor: pointer;" title="to use multiple objects, seprate them with semicolon (;). access signal objects in properties via ?propertyName, access the propertyValue via ??propertyName. Bind to signal configurations via $objectId. You could also use signals inside of a Signal Name via {name}">objects</span>
11
+ <span style="cursor: pointer;" title="to use multiple objects, seprate them with semicolon (;).&#010;Access signal objects in properties via ?propertyName, access the propertyValue via ??propertyName.&#010;Access signal objects in properties of the target via #propertyName, access the propertyValue via ##propertyName.&#010;Bind to signal configurations via $objectId.&#010;You could also use signals inside of a Signal Name via {name}">objects</span>
12
12
  </div>
13
13
  <div id="groupObjectName" style="display:flex;align-items: flex-end;">
14
14
  <input id="objectName" class="row" value="{{?this.objectNames::change}}" style="flex-grow: 1;">
@@ -2,7 +2,13 @@ import { VisualizationBinding } from "../interfaces/VisualizationBinding.js";
2
2
  import { State, VisualizationHandler } from "../interfaces/VisualizationHandler.js";
3
3
  import { BindingTarget } from "@node-projects/web-component-designer/dist/elements/item/BindingTarget.js";
4
4
  export type SpecialValueHandler = {
5
- valueProvider: (propertyName: string) => any;
5
+ valueProvider: (propertyName: string, context: {
6
+ element: Element;
7
+ binding: namedBinding;
8
+ relativeSignalPath: string;
9
+ root: HTMLElement;
10
+ [key: string]: any;
11
+ }) => any;
6
12
  valueChangedCallbacks: Map<string, (() => void)[]>;
7
13
  };
8
14
  export declare const bindingPrefixProperty = "bind-prop:";
@@ -65,9 +65,16 @@ export class IndirectSignal {
65
65
  this.handleValueChanged(root[nm.substring(2)], i);
66
66
  continue;
67
67
  }
68
+ else if (nm[0] === '#' && nm[1] === '#') {
69
+ this.handleValueChanged(element[nm.substring(2)], i);
70
+ continue;
71
+ }
68
72
  else if (nm[0] === '?') {
69
73
  nm = root[nm.substring(1)];
70
74
  }
75
+ else if (nm[0] === '#') {
76
+ nm = element[nm.substring(1)];
77
+ }
71
78
  let cb = (id, value) => this.handleValueChanged(value.val, i);
72
79
  this.unsubscribeList.push([cb, this.visualizationHandler.subscribeState(nm, cb)]);
73
80
  }
@@ -578,6 +585,28 @@ export class BindingsHelper {
578
585
  }
579
586
  }
580
587
  }
588
+ else if (sng[0] === '#') { //access object path in target element
589
+ let s = sng.substring(1);
590
+ if (s[0] == '#') {
591
+ signals[i] = s;
592
+ }
593
+ else {
594
+ signals[i] = root[s];
595
+ if (s[0] === '$') {
596
+ s = s.substring(1);
597
+ signals[i] = '$' + root[s];
598
+ }
599
+ let evtCallback = () => {
600
+ cleanUp();
601
+ this.applyBinding(element, binding, relativeSignalPath, root, specialValueHandler);
602
+ };
603
+ const evtNm = getChangeEventName(element, PropertiesHelper.camelToDashCase(s));
604
+ root.addEventListener(evtNm, evtCallback);
605
+ if (!cleanupCalls)
606
+ cleanupCalls = [];
607
+ cleanupCalls.push(() => root.removeEventListener(evtNm, evtCallback));
608
+ }
609
+ }
581
610
  if (sng[0] === '.') {
582
611
  signals[i] = this._visualizationHandler.getNormalizedSignalName(sng, relativeSignalPath, element);
583
612
  }
@@ -611,6 +640,30 @@ export class BindingsHelper {
611
640
  }
612
641
  }
613
642
  }
643
+ else if (s[0] === '#') { //Binding to element properties
644
+ const nm = s.substring(1);
645
+ let evtCallback = () => {
646
+ let disableValueChanged = false;
647
+ if (!disableValueChanged) {
648
+ disableValueChanged = true;
649
+ this.handleValueChanged(element, binding, element[nm], valuesObject, i, signalVars, false, relativeSignalPath);
650
+ disableValueChanged = false;
651
+ }
652
+ };
653
+ element.addEventListener(PropertiesHelper.camelToDashCase(nm) + '-changed', evtCallback);
654
+ if (!cleanupCalls)
655
+ cleanupCalls = [];
656
+ cleanupCalls.push(() => element.removeEventListener(PropertiesHelper.camelToDashCase(nm) + '-changed', evtCallback));
657
+ try {
658
+ this.handleValueChanged(element, binding, element[nm], valuesObject, i, signalVars, false, relativeSignalPath);
659
+ }
660
+ catch (err) {
661
+ console.error(err);
662
+ }
663
+ if (binding[1].twoWay && i == 0) {
664
+ this.addTwoWayBinding(binding, element, v => element[nm] = v);
665
+ }
666
+ }
614
667
  else if (s[0] === '$') {
615
668
  let mS = s.substring(1);
616
669
  if (mS[0] === '.') {
@@ -622,7 +675,7 @@ export class BindingsHelper {
622
675
  }
623
676
  else if (s[0] === '§') {
624
677
  const mS = s.substring(1);
625
- const value = specialValueHandler.valueProvider(mS);
678
+ const value = specialValueHandler.valueProvider(mS, { element, binding, relativeSignalPath, root });
626
679
  this.handleValueChanged(element, binding, value, valuesObject, i, signalVars, true, relativeSignalPath);
627
680
  if (!specialValueHandler.valueChangedCallbacks)
628
681
  specialValueHandler.valueChangedCallbacks = new Map();
@@ -632,7 +685,7 @@ export class BindingsHelper {
632
685
  specialValueHandler.valueChangedCallbacks.set(mS, changeList);
633
686
  }
634
687
  changeList.push(() => {
635
- const value = specialValueHandler.valueProvider(mS);
688
+ const value = specialValueHandler.valueProvider(mS, { element, binding, relativeSignalPath, root });
636
689
  this.handleValueChanged(element, binding, value, valuesObject, i, signalVars, true, relativeSignalPath);
637
690
  });
638
691
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "web-component-designer addon for visualizations",
3
3
  "name": "@node-projects/web-component-designer-visualization-addons",
4
- "version": "0.1.115",
4
+ "version": "0.1.117",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",