fix event propagator errors
This commit is contained in:
parent
b1e20bfd3f
commit
d9df421dde
|
|
@ -82,18 +82,21 @@ export class FolkEventPropagator extends FolkRope {
|
||||||
} else if (key.endsWith('()')) {
|
} else if (key.endsWith('()')) {
|
||||||
// If the key is a method, execute it if the condition is true
|
// If the key is a method, execute it if the condition is true
|
||||||
const methodName = key.slice(0, -2);
|
const methodName = key.slice(0, -2);
|
||||||
codeLines.push(`if (${value}) { to.${methodName}(); }`);
|
codeLines.push(`
|
||||||
|
if (typeof to.${methodName} !== 'function') throw new Error(\`Method '${methodName}' does not exist on target element.\`);
|
||||||
|
else if (${value}) to.${methodName}();`);
|
||||||
} else {
|
} else {
|
||||||
// For property assignments, assign the value directly
|
// For property assignments, assign the value directly
|
||||||
codeLines.push(`to.${key} = ${value};`);
|
codeLines.push(`
|
||||||
|
if (!('${key}' in to)) throw new Error(\`Property '${key}' does not exist on target element.\`);
|
||||||
|
to.${key} = ${value};`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const functionBody = codeLines.join('\n');
|
const functionBody = codeLines.join('\n');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
parseAst(functionBody);
|
// parseAst(functionBody);
|
||||||
|
|
||||||
this.#function = new Function('from', 'to', 'event', functionBody);
|
this.#function = new Function('from', 'to', 'event', functionBody);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn('Failed to parse expression:', error, functionBody);
|
console.warn('Failed to parse expression:', error, functionBody);
|
||||||
|
|
@ -186,26 +189,7 @@ export class FolkEventPropagator extends FolkRope {
|
||||||
if (!this.#function) return;
|
if (!this.#function) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const toProxy = new Proxy(this.targetElement, {
|
this.#function(this.sourceElement, this.targetElement, event);
|
||||||
set(target, prop, value, receiver) {
|
|
||||||
if (!(prop in target)) {
|
|
||||||
throw new Error(`Property '${String(prop)}' does not exist on target element.`);
|
|
||||||
}
|
|
||||||
return Reflect.set(target, prop, value, receiver);
|
|
||||||
},
|
|
||||||
get(target, prop, receiver) {
|
|
||||||
const value = Reflect.get(target, prop, receiver);
|
|
||||||
if (value === undefined) {
|
|
||||||
throw new Error(`Property '${String(prop)}' does not exist on target element.`);
|
|
||||||
}
|
|
||||||
if (typeof value === 'function') {
|
|
||||||
return value.bind(target);
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
this.#function(this.sourceElement, toProxy, event);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn('Failed to evaluate expression:', error);
|
console.warn('Failed to evaluate expression:', error);
|
||||||
this.stroke = 'red';
|
this.stroke = 'red';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue