From b58f019528fba4a6ee6c6e21e903ab0716f192e3 Mon Sep 17 00:00:00 2001 From: Oguz Date: Wed, 11 Mar 2020 16:43:49 +0100 Subject: [PATCH] feat(lib): insource closest to support shadow dom Closes #5 --- README.md | 2 +- lib/closest.js | 27 ++++++++++++++++++++++++--- package.json | 1 - 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2086390..98ddcdf 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The library exposes the following tiny dom helpers: * `attr` - get and set node attributes * `classes` - class name helper * `clear` - remove children from a node -* `closest` - get the closest parent by selector; [component-closest](https://github.com/component/closest) +* `closest` - get the closest parent by selector; * `delegate` - event deletation support; [delegate-events](https://www.npmjs.com/package/delegate-events) * `domify` - html to elements; [domify](https://github.com/component/domify) * `event` - event binding; [component-event](https://github.com/component/event) diff --git a/lib/closest.js b/lib/closest.js index 67e19fa..8664032 100644 --- a/lib/closest.js +++ b/lib/closest.js @@ -1,3 +1,24 @@ -export { - default -} from 'closest'; \ No newline at end of file +import matches from './matches'; + +/** + * Closest + * + * @param {Element} el + * @param {String} selector + * @param {Boolean} checkYourSelf (optional) + */ +export default function(element, selector, checkYourSelf) { + var currentElem = checkYourSelf ? element : element.parentNode; + + while (currentElem && currentElem.nodeType !== document.DOCUMENT_NODE && + currentElem.nodeType !== document.DOCUMENT_FRAGMENT_NODE) { + + if (matches(currentElem, selector)) { + return currentElem; + } + + currentElem = currentElem.parentNode; + } + + return matches(currentElem, selector) ? currentElem : null; +} diff --git a/package.json b/package.json index 4669f4a..d161f8b 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "closest": "0.0.1", "component-event": "^0.1.4", "delegate-events": "^1.1.1", "domify": "^1.3.1",