turbo-web 4.4.0 → 4.5.0

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.
Files changed (2) hide show
  1. package/dist/turbo.js +16 -6
  2. package/package.json +1 -1
package/dist/turbo.js CHANGED
@@ -194,26 +194,35 @@ function hSlot(name = 'default', children = []) {
194
194
  return { type: DOM_TYPES.SLOT, name: name, children: children }
195
195
  }
196
196
 
197
- function addEventListener(eventNameWithModifiers, handler, el, hostComponent = null) {
197
+ function addEventListener(eventNameWithModifiers, handlerConfig, el, hostComponent = null) {
198
198
  const [eventName, ...modifiers] = eventNameWithModifiers.split('.');
199
+ const isDelegated = typeof handlerConfig === 'object' && handlerConfig.delegate;
200
+ const handler = isDelegated ? handlerConfig.handler : handlerConfig;
201
+ const selector = isDelegated ? handlerConfig.delegate : null;
199
202
  function boundHandler(event) {
203
+ let target = event.target;
204
+ if (isDelegated) {
205
+ target = event.target.closest(selector);
206
+ if (!target || !el.contains(target)) return;
207
+ }
200
208
  if (modifiers.includes('stop')) {
201
209
  event.stopPropagation();
202
210
  }
203
211
  if (modifiers.includes('prevent')) {
204
212
  event.preventDefault();
205
213
  }
214
+ const args = isDelegated ? [event, target] : [event];
206
215
  hostComponent
207
- ? handler.apply(hostComponent, arguments)
208
- : handler(...arguments);
216
+ ? handler.apply(hostComponent, args)
217
+ : handler(...args);
209
218
  }
210
219
  el.addEventListener(eventName, boundHandler);
211
220
  return boundHandler
212
221
  }
213
222
  function addEventListeners(listeners = {}, el, hostComponent = null ) {
214
223
  const addedListeners = {};
215
- Object.entries(listeners).forEach(([eventName, handler]) => {
216
- const listener = addEventListener(eventName, handler, el, hostComponent);
224
+ Object.entries(listeners).forEach(([eventName, handlerConfig]) => {
225
+ const listener = addEventListener(eventName, handlerConfig, el, hostComponent);
217
226
  addedListeners[eventName] = listener;
218
227
  });
219
228
  return addedListeners
@@ -905,7 +914,8 @@ function patchEvents(el, oldListeners = {}, oldEvents = {}, newEvents = {}, host
905
914
  const eventName = eventNameWithModifiers.split('.')[0];
906
915
  el.removeEventListener(eventName, oldListeners[eventNameWithModifiers]);
907
916
  }
908
- const addedListeners = {};
917
+ const addedListeners = { ...oldListeners };
918
+ removed.forEach(key => delete addedListeners[key]);
909
919
  for (const eventNameWithModifiers of added.concat(updated)) {
910
920
  const listener = addEventListener(eventNameWithModifiers, newEvents[eventNameWithModifiers], el, hostComponent);
911
921
  addedListeners[eventNameWithModifiers] = listener;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "turbo-web",
3
- "version": "4.4.0",
3
+ "version": "4.5.0",
4
4
  "main": "dist/turbo.js",
5
5
  "files": [
6
6
  "dist",