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.
- package/dist/turbo.js +16 -6
- 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,
|
|
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,
|
|
208
|
-
: handler(...
|
|
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,
|
|
216
|
-
const listener = addEventListener(eventName,
|
|
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;
|