@fictjs/runtime 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @fictjs/runtime
2
2
 
3
- ![Node CI](https://github.com/fictjs/fict/workflows/Node%20CI/badge.svg)
3
+ ![Node CI](https://github.com/fictjs/fict/workflows/CI/badge.svg)
4
4
  ![npm](https://img.shields.io/npm/v/fict.svg)
5
5
  ![license](https://img.shields.io/npm/l/fict)
6
6
 
package/dist/index.cjs CHANGED
@@ -1840,6 +1840,27 @@ function isReactive(value) {
1840
1840
  function unwrap2(value) {
1841
1841
  return isReactive(value) ? value() : value;
1842
1842
  }
1843
+ function callEventHandler(handler, event, node, data) {
1844
+ if (!handler) return;
1845
+ const context = node ?? event.currentTarget ?? void 0;
1846
+ const invoke = (fn) => {
1847
+ if (typeof fn === "function") {
1848
+ const result = data === void 0 ? fn.call(context, event) : fn.call(context, data, event);
1849
+ if (typeof result === "function" && result !== fn) {
1850
+ if (data === void 0) {
1851
+ result.call(context, event);
1852
+ } else {
1853
+ result.call(context, data, event);
1854
+ }
1855
+ } else if (result && typeof result.handleEvent === "function") {
1856
+ result.handleEvent.call(result, event);
1857
+ }
1858
+ } else if (fn && typeof fn.handleEvent === "function") {
1859
+ fn.handleEvent.call(fn, event);
1860
+ }
1861
+ };
1862
+ invoke(handler);
1863
+ }
1843
1864
  var PRIMITIVE_PROXY = Symbol("fict:primitive-proxy");
1844
1865
  var PRIMITIVE_PROXY_RAW_VALUE = Symbol("fict:primitive-proxy:raw-value");
1845
1866
  function unwrapPrimitive(value) {
@@ -2353,14 +2374,10 @@ function globalEventHandler(e) {
2353
2374
  const hasData = rawData !== void 0;
2354
2375
  const resolvedNodeData = hasData ? resolveData(rawData) : void 0;
2355
2376
  if (typeof handler === "function") {
2356
- if (hasData) {
2357
- handler.call(node, resolvedNodeData, e);
2358
- } else {
2359
- handler.call(node, e);
2360
- }
2377
+ callEventHandler(handler, e, node, hasData ? resolvedNodeData : void 0);
2361
2378
  } else if (Array.isArray(handler)) {
2362
2379
  const tupleData = resolveData(handler[1]);
2363
- handler[0].call(node, tupleData, e);
2380
+ callEventHandler(handler[0], e, node, tupleData);
2364
2381
  }
2365
2382
  if (e.cancelBubble) return false;
2366
2383
  }
@@ -2424,23 +2441,15 @@ function bindEvent(el, eventName, handler, options2) {
2424
2441
  if (DelegatedEvents.has(eventName) && !options2) {
2425
2442
  const key = `$$${eventName}`;
2426
2443
  delegateEvents([eventName]);
2427
- const createWrapped = (resolve) => {
2428
- const wrapped2 = function(...args) {
2429
- try {
2430
- const fn = resolve();
2431
- if (typeof fn === "function") {
2432
- return fn.apply(this, args);
2433
- } else if (fn && typeof fn.handleEvent === "function") {
2434
- return fn.handleEvent.apply(fn, args);
2435
- }
2436
- } catch (err) {
2437
- handleError(err, { source: "event", eventName }, rootRef);
2438
- }
2439
- };
2440
- return wrapped2;
2441
- };
2442
2444
  const resolveHandler = isReactive(handler) ? handler : () => handler;
2443
- el[key] = createWrapped(resolveHandler);
2445
+ el[key] = function(...args) {
2446
+ try {
2447
+ const fn = resolveHandler();
2448
+ callEventHandler(fn, args[0], el);
2449
+ } catch (err) {
2450
+ handleError(err, { source: "event", eventName }, rootRef);
2451
+ }
2452
+ };
2444
2453
  return () => {
2445
2454
  el[key] = void 0;
2446
2455
  };
@@ -2449,13 +2458,7 @@ function bindEvent(el, eventName, handler, options2) {
2449
2458
  const wrapped = (event) => {
2450
2459
  try {
2451
2460
  const resolved = getHandler();
2452
- if (typeof resolved === "function") {
2453
- ;
2454
- resolved(event);
2455
- } else if (resolved && typeof resolved.handleEvent === "function") {
2456
- ;
2457
- resolved.handleEvent(event);
2458
- }
2461
+ callEventHandler(resolved, event, el);
2459
2462
  } catch (err) {
2460
2463
  if (handleError(err, { source: "event", eventName }, rootRef)) {
2461
2464
  return;
@@ -4164,6 +4167,7 @@ exports.bindProperty = bindProperty;
4164
4167
  exports.bindRef = bindRef;
4165
4168
  exports.bindStyle = bindStyle;
4166
4169
  exports.bindText = bindText;
4170
+ exports.callEventHandler = callEventHandler;
4167
4171
  exports.classList = classList;
4168
4172
  exports.clearDelegatedEvents = clearDelegatedEvents;
4169
4173
  exports.createAttributeBinding = createAttributeBinding;