Skip to content

Commit

Permalink
- Added handling to clean delegate events.
Browse files Browse the repository at this point in the history
  • Loading branch information
elusivecodes committed Dec 26, 2023
1 parent bb1328a commit be4fedd
Show file tree
Hide file tree
Showing 8 changed files with 198 additions and 119 deletions.
33 changes: 32 additions & 1 deletion dist/fquery.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/fquery.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/fquery.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/fquery.min.js.map

Large diffs are not rendered by default.

231 changes: 124 additions & 107 deletions package-lock.json

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@fr0st/query",
"version": "3.2.3",
"version": "3.2.4",
"description": "fQuery is a free, open-source DOM manipulation library for JavaScript.",
"keywords": [
"dom",
Expand Down Expand Up @@ -38,12 +38,12 @@
"private": false,
"devDependencies": {
"@rollup/plugin-node-resolve": "^15.2.3",
"eslint": "^8.54.0",
"eslint": "^8.56.0",
"eslint-config-google": "^0.14.0",
"mocha": "^10.2.0",
"puppeteer": "^21.5.2",
"rollup": "^4.6.0",
"terser": "^5.24.0"
"puppeteer": "^21.6.1",
"rollup": "^4.9.1",
"terser": "^5.26.0"
},
"dependencies": {
"@fr0st/core": "^2.1.3"
Expand Down
33 changes: 31 additions & 2 deletions src/events/event-factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,18 +75,47 @@ export function delegateFactory(node, selector, callback) {
}

Object.defineProperty(event, 'currentTarget', {
value: delegate,
configurable: true,
enumerable: true,
value: delegate,
});
Object.defineProperty(event, 'delegateTarget', {
value: node,
configurable: true,
enumerable: true,
value: node,
});

return callback(event);
};
};

/**
* Return a wrapped event callback that cleans up delegate events.
* @param {HTMLElement|ShadowRoot|Document} node The input node.
* @param {function} callback The event callback.
* @return {DOM~eventCallback} The cleaned event callback.
*/
export function delegateFactoryClean(node, callback) {
return (event) => {
if (!event.delegateTarget) {
return callback(event);
}

Object.defineProperty(event, 'currentTarget', {
configurable: true,
enumerable: true,
value: node,
});
Object.defineProperty(event, 'delegateTarget', {
writable: true,
});

delete event.delegateTarget;

return callback(event);
};
}

/**
* Return a wrapped mouse drag event (optionally debounced).
* @param {DOM~eventCallback} down The callback to execute on mousedown.
Expand Down
4 changes: 3 additions & 1 deletion src/events/event-handlers.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { delegateFactory, namespaceFactory, preventFactory, selfDestructFactory } from './event-factory.js';
import { delegateFactory, delegateFactoryClean, namespaceFactory, preventFactory, selfDestructFactory } from './event-factory.js';
import { parseNode, parseNodes } from './../filters.js';
import { eventNamespacedRegExp, parseEvent, parseEvents } from './../helpers.js';
import { events } from './../vars.js';
Expand Down Expand Up @@ -55,6 +55,8 @@ export function addEvent(selector, eventNames, callback, { capture = false, dele

if (delegate) {
realCallback = delegateFactory(node, delegate, realCallback);
} else {
realCallback = delegateFactoryClean(node, realCallback);
}

realCallback = namespaceFactory(eventName, realCallback);
Expand Down

0 comments on commit be4fedd

Please sign in to comment.