Skip to content

Commit efabcbf

Browse files
authored
Element.matches + Element.closest (#39)
1 parent 1c1b006 commit efabcbf

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Breaking changes:
1010

1111
New features:
1212
- Add support for ShadowRoot API (#34)
13+
- Add support for `Element.matches` and `Element.closest` (#39)
1314

1415
Bugfixes:
1516

src/Web/DOM/Element.js

+16
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,22 @@ exports.removeAttribute = function (name) {
105105
};
106106
};
107107

108+
exports.matches = function (selector) {
109+
return function(element) {
110+
return function () {
111+
return element.matches(selector);
112+
};
113+
};
114+
};
115+
116+
exports._closest = function (selector) {
117+
return function(element) {
118+
return function () {
119+
return element.closest(selector);
120+
};
121+
};
122+
};
123+
108124
// - CSSOM ---------------------------------------------------------------------
109125

110126
exports.scrollTop = function (node) {

src/Web/DOM/Element.purs

+11-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ module Web.DOM.Element
2626
, getAttribute
2727
, hasAttribute
2828
, removeAttribute
29+
, matches
30+
, closest
2931
, scrollTop
3032
, setScrollTop
3133
, scrollLeft
@@ -51,7 +53,8 @@ import Web.DOM.DOMTokenList (DOMTokenList)
5153
import Web.DOM.Internal.Types (Element) as Exports
5254
import Web.DOM.Internal.Types (Element, HTMLCollection, Node)
5355
import Web.DOM.NonDocumentTypeChildNode (NonDocumentTypeChildNode)
54-
import Web.DOM.ParentNode (ParentNode)
56+
import Web.DOM.ParentNode (QuerySelector) as Exports
57+
import Web.DOM.ParentNode (ParentNode, QuerySelector)
5558
import Web.DOM.ShadowRoot (ShadowRoot, ShadowRootMode)
5659
import Web.Event.EventTarget (EventTarget)
5760
import Web.Internal.FFI (unsafeReadProtoTagged)
@@ -121,6 +124,13 @@ foreign import _getAttribute :: String -> Element -> Effect (Nullable String)
121124
foreign import hasAttribute :: String -> Element -> Effect Boolean
122125
foreign import removeAttribute :: String -> Element -> Effect Unit
123126

127+
foreign import matches :: QuerySelector -> Element -> Effect Boolean
128+
129+
closest :: QuerySelector -> Element -> Effect (Maybe Element)
130+
closest qs = map toMaybe <<< _closest qs
131+
132+
foreign import _closest :: QuerySelector -> Element -> Effect (Nullable Element)
133+
124134
foreign import scrollTop :: Element -> Effect Number
125135
foreign import setScrollTop :: Number -> Element -> Effect Unit
126136

0 commit comments

Comments
 (0)