diff --git a/CHANGELOG.md b/CHANGELOG.md index e1edc2e..388707b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ Breaking changes: New features: - Add support for ShadowRoot API (#34) +- Add support for `Element.matches` and `Element.closest` (#39) Bugfixes: diff --git a/src/Web/DOM/Element.js b/src/Web/DOM/Element.js index 3ca6e1d..d8ee8eb 100644 --- a/src/Web/DOM/Element.js +++ b/src/Web/DOM/Element.js @@ -105,6 +105,22 @@ exports.removeAttribute = function (name) { }; }; +exports.matches = function (selector) { + return function(element) { + return function () { + return element.matches(selector); + }; + }; +}; + +exports._closest = function (selector) { + return function(element) { + return function () { + return element.closest(selector); + }; + }; +}; + // - CSSOM --------------------------------------------------------------------- exports.scrollTop = function (node) { diff --git a/src/Web/DOM/Element.purs b/src/Web/DOM/Element.purs index 5c1c10c..fcae553 100644 --- a/src/Web/DOM/Element.purs +++ b/src/Web/DOM/Element.purs @@ -26,6 +26,8 @@ module Web.DOM.Element , getAttribute , hasAttribute , removeAttribute + , matches + , closest , scrollTop , setScrollTop , scrollLeft @@ -51,7 +53,8 @@ import Web.DOM.DOMTokenList (DOMTokenList) import Web.DOM.Internal.Types (Element) as Exports import Web.DOM.Internal.Types (Element, HTMLCollection, Node) import Web.DOM.NonDocumentTypeChildNode (NonDocumentTypeChildNode) -import Web.DOM.ParentNode (ParentNode) +import Web.DOM.ParentNode (QuerySelector) as Exports +import Web.DOM.ParentNode (ParentNode, QuerySelector) import Web.DOM.ShadowRoot (ShadowRoot, ShadowRootMode) import Web.Event.EventTarget (EventTarget) import Web.Internal.FFI (unsafeReadProtoTagged) @@ -121,6 +124,13 @@ foreign import _getAttribute :: String -> Element -> Effect (Nullable String) foreign import hasAttribute :: String -> Element -> Effect Boolean foreign import removeAttribute :: String -> Element -> Effect Unit +foreign import matches :: QuerySelector -> Element -> Effect Boolean + +closest :: QuerySelector -> Element -> Effect (Maybe Element) +closest qs = map toMaybe <<< _closest qs + +foreign import _closest :: QuerySelector -> Element -> Effect (Nullable Element) + foreign import scrollTop :: Element -> Effect Number foreign import setScrollTop :: Number -> Element -> Effect Unit