aboutsummaryrefslogtreecommitdiff
path: root/js/src/Dom.purs
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/Dom.purs')
-rw-r--r--js/src/Dom.purs34
1 files changed, 29 insertions, 5 deletions
diff --git a/js/src/Dom.purs b/js/src/Dom.purs
index a71cda7..426c390 100644
--- a/js/src/Dom.purs
+++ b/js/src/Dom.purs
@@ -1,6 +1,7 @@
module Dom
( onInput
, selectElement
+ , selectElements
, selectElementFrom
, selectElementsFrom
, replaceElement
@@ -26,8 +27,8 @@ import DOM.Node.Node (replaceChild, parentNode, appendChild) as DOM
import DOM.Node.NodeList (length, item) as DOM
import DOM.Node.ParentNode (QuerySelector)
import DOM.Node.ParentNode (querySelector, querySelectorAll) as DOM
-import DOM.Node.Types (Element, Node)
-import DOM.Node.Types (elementToParentNode) as DOM
+import DOM.Node.Types (Element, Node, NodeList)
+import DOM.Node.Types (elementToParentNode, readElement) as DOM
foreign import onInput :: forall e. Element -> (String -> Eff (dom :: DOM | e) Unit) -> Eff (dom :: DOM | e) Unit
@@ -36,18 +37,41 @@ selectElement query = do
document <- DOM.window >>= DOM.document
DOM.querySelector query (DOM.htmlDocumentToParentNode document)
+selectElements :: forall e. QuerySelector -> Eff (dom :: DOM | e) (Array Element)
+selectElements query = do
+ document <- DOM.window >>= DOM.document
+ nodeList <- DOM.querySelectorAll query (DOM.htmlDocumentToParentNode document)
+ getNodes nodeList
+
selectElementFrom :: forall e. Element -> QuerySelector -> Eff (dom :: DOM | e) (Maybe Element)
-selectElementFrom elem query = DOM.querySelector query (DOM.elementToParentNode elem)
+selectElementFrom elem query =
+ DOM.querySelector query (DOM.elementToParentNode elem)
-selectElementsFrom :: forall e. Element -> QuerySelector -> Eff (dom :: DOM | e) (Array Node)
+selectElementsFrom :: forall e. Element -> QuerySelector -> Eff (dom :: DOM | e) (Array Element)
selectElementsFrom elem query = do
nodeList <- DOM.querySelectorAll query (DOM.elementToParentNode elem)
+ getNodes nodeList
+
+getNodes :: forall e. NodeList -> Eff (dom :: DOM | e) (Array Element)
+getNodes nodeList = do
length <- DOM.length nodeList
Array.range 0 length
- # map (\i -> DOM.item i nodeList)
+ # (map (\i -> (concatMaybe <<< map nodeToElement) <$> DOM.item i nodeList))
# Traversable.sequence
# map Array.catMaybes
+concatMaybe :: forall a. Maybe (Maybe a) -> Maybe a
+concatMaybe mma =
+ case mma of
+ Just x -> x
+ Nothing -> Nothing
+
+nodeToElement :: Node -> Maybe Element
+nodeToElement node =
+ case Except.runExcept $ DOM.readElement (Foreign.toForeign node) of
+ Right element -> Just element
+ _ -> Nothing
+
replaceElement :: forall e. Node -> Node -> Eff (dom :: DOM | e) Unit
replaceElement before after = do
parent <- DOM.parentNode before