@node-projects/web-component-designer-visualization-addons 0.1.108 → 0.1.110
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.
- package/dist/components/BindingsEditor.d.ts +1 -1
- package/dist/helpers/BindingsHelper.d.ts +23 -3
- package/dist/helpers/BindingsHelper.js +36 -9
- package/dist/interfaces/VisualisationElementScript.d.ts +3 -3
- package/dist/scripting/ScriptSystem.d.ts +1 -1
- package/dist/scripting/ScriptSystem.js +7 -3
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import { VisualizationShell } from '../interfaces/VisualizationShell.js';
|
|
|
4
4
|
export declare class BindingsEditor extends BaseCustomWebComponentConstructorAppend {
|
|
5
5
|
static readonly template: HTMLTemplateElement;
|
|
6
6
|
static readonly style: CSSStyleSheet;
|
|
7
|
-
static readonly is
|
|
7
|
+
static readonly is: string;
|
|
8
8
|
static readonly properties: {
|
|
9
9
|
twoWayPossible: BooleanConstructor;
|
|
10
10
|
twoWay: BooleanConstructor;
|
|
@@ -44,10 +44,30 @@ export declare class BindingsHelper {
|
|
|
44
44
|
serializeBinding(element: Element, targetName: string, binding: VisualizationBinding): [name: string, value: string];
|
|
45
45
|
getBindingAttributeName(element: Element, propertyName: string, propertyTarget: BindingTarget): string;
|
|
46
46
|
getBindings(element: Element): Generator<namedBinding, void, unknown>;
|
|
47
|
-
applyAllBindings(rootElement: ParentNode, relativeSignalPath: string, root: HTMLElement
|
|
47
|
+
applyAllBindings(rootElement: ParentNode, relativeSignalPath: string, root: HTMLElement, specialValueHandler?: {
|
|
48
|
+
valueProvider: (propertyName: string) => any;
|
|
49
|
+
valueChangedCallbacks: Map<string, (() => void)[]>;
|
|
50
|
+
}): (() => void)[];
|
|
48
51
|
parseCssBindings(sheet: string, element: Element, relativeSignalPath: string, root: HTMLElement): Promise<[stylesheet: CSSStyleSheet, unsub: (() => void)[]]>;
|
|
49
|
-
parseCssBinding(value: string, element: Element, relativeSignalPath: string, root: HTMLElement
|
|
50
|
-
|
|
52
|
+
parseCssBinding(value: string, element: Element, relativeSignalPath: string, root: HTMLElement, specialValueHandler?: {
|
|
53
|
+
valueProvider: (propertyName: string) => any;
|
|
54
|
+
valueChangedCallbacks: Map<string, (() => void)[]>;
|
|
55
|
+
}): [name: string, unsub: (() => void)[]];
|
|
56
|
+
/**
|
|
57
|
+
* ? = bind to signals in properties
|
|
58
|
+
* ?? = binding to a property
|
|
59
|
+
* $ = bind to a signal configuration
|
|
60
|
+
* § = bind to a special value
|
|
61
|
+
* @param element
|
|
62
|
+
* @param binding
|
|
63
|
+
* @param relativeSignalPath
|
|
64
|
+
* @param root
|
|
65
|
+
* @returns
|
|
66
|
+
*/
|
|
67
|
+
applyBinding(element: Element, binding: namedBinding, relativeSignalPath: string, root: HTMLElement, specialValueHandler?: {
|
|
68
|
+
valueProvider: (propertyName: string) => any;
|
|
69
|
+
valueChangedCallbacks: Map<string, (() => void)[]>;
|
|
70
|
+
}): () => void;
|
|
51
71
|
private addTwoWayBinding;
|
|
52
72
|
private static parseValueWithType;
|
|
53
73
|
handleValueChanged(element: Element, binding: namedBinding, value: any, valuesObject: any[], index: number, signalVarNames: string[], noParse: boolean, relativeSignalPath: string): void;
|
|
@@ -405,7 +405,7 @@ export class BindingsHelper {
|
|
|
405
405
|
}
|
|
406
406
|
}
|
|
407
407
|
}
|
|
408
|
-
applyAllBindings(rootElement, relativeSignalPath, root) {
|
|
408
|
+
applyAllBindings(rootElement, relativeSignalPath, root, specialValueHandler) {
|
|
409
409
|
let retVal = [];
|
|
410
410
|
const tw = document.createTreeWalker(rootElement, NodeFilter.SHOW_ELEMENT);
|
|
411
411
|
let e;
|
|
@@ -413,7 +413,7 @@ export class BindingsHelper {
|
|
|
413
413
|
const bindings = this.getBindings(e);
|
|
414
414
|
for (let b of bindings) {
|
|
415
415
|
try {
|
|
416
|
-
let applied = this.applyBinding(e, b, relativeSignalPath, root);
|
|
416
|
+
let applied = this.applyBinding(e, b, relativeSignalPath, root, specialValueHandler);
|
|
417
417
|
retVal.push(applied);
|
|
418
418
|
if (b[1].maybeLitElement && e.localName.includes('-') && !customElements.get(e.localName)) {
|
|
419
419
|
const el = e;
|
|
@@ -422,7 +422,7 @@ export class BindingsHelper {
|
|
|
422
422
|
if (isLit(el)) {
|
|
423
423
|
applied();
|
|
424
424
|
bnd[1].events = bnd[1].litEventNames;
|
|
425
|
-
retVal.push(this.applyBinding(el, bnd, relativeSignalPath, root));
|
|
425
|
+
retVal.push(this.applyBinding(el, bnd, relativeSignalPath, root, specialValueHandler));
|
|
426
426
|
}
|
|
427
427
|
});
|
|
428
428
|
}
|
|
@@ -460,7 +460,7 @@ export class BindingsHelper {
|
|
|
460
460
|
const newStyle = parser.stringify(ast, { indent: '', compress: true });
|
|
461
461
|
return [cssFromString(newStyle), unsub];
|
|
462
462
|
}
|
|
463
|
-
parseCssBinding(value, element, relativeSignalPath, root) {
|
|
463
|
+
parseCssBinding(value, element, relativeSignalPath, root, specialValueHandler) {
|
|
464
464
|
value = value.trim();
|
|
465
465
|
let res = '';
|
|
466
466
|
let tmp = '';
|
|
@@ -485,7 +485,7 @@ export class BindingsHelper {
|
|
|
485
485
|
if (binding.startsWith('{')) {
|
|
486
486
|
bnd = JSON.parse(binding);
|
|
487
487
|
}
|
|
488
|
-
unsub.push(this.applyBinding(element, bnd, relativeSignalPath, root));
|
|
488
|
+
unsub.push(this.applyBinding(element, bnd, relativeSignalPath, root, specialValueHandler));
|
|
489
489
|
res += 'var(' + varName + ')';
|
|
490
490
|
inBind = false;
|
|
491
491
|
binding = '';
|
|
@@ -520,7 +520,18 @@ export class BindingsHelper {
|
|
|
520
520
|
}
|
|
521
521
|
return [res + tmp, unsub];
|
|
522
522
|
}
|
|
523
|
-
|
|
523
|
+
/**
|
|
524
|
+
* ? = bind to signals in properties
|
|
525
|
+
* ?? = binding to a property
|
|
526
|
+
* $ = bind to a signal configuration
|
|
527
|
+
* § = bind to a special value
|
|
528
|
+
* @param element
|
|
529
|
+
* @param binding
|
|
530
|
+
* @param relativeSignalPath
|
|
531
|
+
* @param root
|
|
532
|
+
* @returns
|
|
533
|
+
*/
|
|
534
|
+
applyBinding(element, binding, relativeSignalPath, root, specialValueHandler) {
|
|
524
535
|
let unsubscribeList = [];
|
|
525
536
|
let cleanupCalls;
|
|
526
537
|
const cleanUp = () => {
|
|
@@ -558,7 +569,7 @@ export class BindingsHelper {
|
|
|
558
569
|
}
|
|
559
570
|
let evtCallback = () => {
|
|
560
571
|
cleanUp();
|
|
561
|
-
this.applyBinding(element, binding, relativeSignalPath, root);
|
|
572
|
+
this.applyBinding(element, binding, relativeSignalPath, root, specialValueHandler);
|
|
562
573
|
};
|
|
563
574
|
const evtNm = getChangeEventName(element, PropertiesHelper.camelToDashCase(s));
|
|
564
575
|
root.addEventListener(evtNm, evtCallback);
|
|
@@ -575,7 +586,7 @@ export class BindingsHelper {
|
|
|
575
586
|
let valuesObject = new Array(signals.length);
|
|
576
587
|
for (let i = 0; i < signals.length; i++) {
|
|
577
588
|
const s = signals[i];
|
|
578
|
-
if (s[0]
|
|
589
|
+
if (s[0] === '?') {
|
|
579
590
|
if (root) {
|
|
580
591
|
const nm = s.substring(1);
|
|
581
592
|
let evtCallback = () => {
|
|
@@ -601,7 +612,7 @@ export class BindingsHelper {
|
|
|
601
612
|
}
|
|
602
613
|
}
|
|
603
614
|
}
|
|
604
|
-
else if (s[0]
|
|
615
|
+
else if (s[0] === '$') {
|
|
605
616
|
let mS = s.substring(1);
|
|
606
617
|
if (mS[0] === '.') {
|
|
607
618
|
mS = this._visualizationHandler.getNormalizedSignalName(mS, relativeSignalPath, element);
|
|
@@ -610,6 +621,22 @@ export class BindingsHelper {
|
|
|
610
621
|
this.handleValueChanged(element, binding, x, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
611
622
|
});
|
|
612
623
|
}
|
|
624
|
+
else if (s[0] === '§') {
|
|
625
|
+
const mS = s.substring(1);
|
|
626
|
+
const value = specialValueHandler.valueProvider(mS);
|
|
627
|
+
this.handleValueChanged(element, binding, value, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
628
|
+
if (!specialValueHandler.valueChangedCallbacks)
|
|
629
|
+
specialValueHandler.valueChangedCallbacks = new Map();
|
|
630
|
+
let changeList = specialValueHandler.valueChangedCallbacks.get(mS);
|
|
631
|
+
if (changeList != null) {
|
|
632
|
+
changeList = [];
|
|
633
|
+
specialValueHandler.valueChangedCallbacks.set(mS, changeList);
|
|
634
|
+
}
|
|
635
|
+
changeList.push(() => {
|
|
636
|
+
const value = specialValueHandler.valueProvider(mS);
|
|
637
|
+
this.handleValueChanged(element, binding, value, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
638
|
+
});
|
|
639
|
+
}
|
|
613
640
|
else {
|
|
614
641
|
if (s.includes('{')) {
|
|
615
642
|
let indirectSignal = new IndirectSignal(this._visualizationHandler, s, (value) => this.handleValueChanged(element, binding, value.val, valuesObject, i, signalVars, false, relativeSignalPath), element, relativeSignalPath, root);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export interface VisualisationElementScript {
|
|
2
|
-
init?(instance: HTMLElement): any;
|
|
3
|
-
connectedCallback?(instance: HTMLElement): any;
|
|
4
|
-
disconnectedCallback?(instance: HTMLElement): any;
|
|
2
|
+
init?(instance: HTMLElement, shadowRoot: ShadowRoot): any;
|
|
3
|
+
connectedCallback?(instance: HTMLElement, shadowRoot: ShadowRoot): any;
|
|
4
|
+
disconnectedCallback?(instance: HTMLElement, shadowRoot: ShadowRoot): any;
|
|
5
5
|
}
|
|
@@ -23,5 +23,5 @@ export declare class ScriptSystem {
|
|
|
23
23
|
getSignaName(name: string, outerContext: contextType): string;
|
|
24
24
|
static extractPart(obj: any, propertyPath: string): any;
|
|
25
25
|
createScriptContext(root: HTMLElement, event: Event, element: Element, parameters: Record<string, any>, relativeSignalsPath: string): any;
|
|
26
|
-
assignAllScripts(source: string, javascriptCode: string, shadowRoot: ShadowRoot, instance: HTMLElement, visualizationHandler: VisualizationHandler, contextCreator?: (root: HTMLElement, event: Event, element: Element, parameters: Record<string, any>, relativeSignalsPath: string) => any, assignExternalScript?: (element: Element, event: string, scriptData: any) => void): Promise<VisualisationElementScript>;
|
|
26
|
+
assignAllScripts(source: string, javascriptCode: string, shadowRoot: ShadowRoot, instance: HTMLElement, visualizationHandler: VisualizationHandler, contextCreator?: (root: HTMLElement, event: Event, element: Element, parameters: Record<string, any>, relativeSignalsPath: string) => any, assignExternalScript?: (element: Element, event: string, scriptData: any) => void, runInitalization?: (jsObject: VisualisationElementScript) => void): Promise<VisualisationElementScript>;
|
|
27
27
|
}
|
|
@@ -405,7 +405,7 @@ export class ScriptSystem {
|
|
|
405
405
|
createScriptContext(root, event, element, parameters, relativeSignalsPath) {
|
|
406
406
|
return { root, event, element, parameters, relativeSignalsPath };
|
|
407
407
|
}
|
|
408
|
-
async assignAllScripts(source, javascriptCode, shadowRoot, instance, visualizationHandler, contextCreator, assignExternalScript) {
|
|
408
|
+
async assignAllScripts(source, javascriptCode, shadowRoot, instance, visualizationHandler, contextCreator, assignExternalScript, runInitalization) {
|
|
409
409
|
const allElements = shadowRoot.querySelectorAll('*');
|
|
410
410
|
contextCreator ??= this.createScriptContext;
|
|
411
411
|
let jsObject = null;
|
|
@@ -413,8 +413,12 @@ export class ScriptSystem {
|
|
|
413
413
|
try {
|
|
414
414
|
const scriptUrl = URL.createObjectURL(new Blob([javascriptCode], { type: 'application/javascript' }));
|
|
415
415
|
jsObject = await import(scriptUrl);
|
|
416
|
-
if (
|
|
417
|
-
jsObject
|
|
416
|
+
if (runInitalization)
|
|
417
|
+
runInitalization(jsObject);
|
|
418
|
+
else {
|
|
419
|
+
if (jsObject.init) {
|
|
420
|
+
jsObject.init(instance, shadowRoot);
|
|
421
|
+
}
|
|
418
422
|
}
|
|
419
423
|
}
|
|
420
424
|
catch (err) {
|
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.
|
|
4
|
+
"version": "0.1.110",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"author": "jochen.kuehner@gmx.de",
|