on develop help sign in
Add namedNodeMapGetNames and nodeClear
commitf7b75e5ec322f00c488f28aaa8fea087dc5e2c64 authorRyan Trinkle <ryan.trinkle@gmail.com> dateTue 9 Aug 2016, 16:29 (10 years ago) parent8c89475
1 file changed+24−1
src/Reflex/Dom/Old.hs+24−1
src/Reflex/Dom/Old.hs+24−1
@@ -25,6 +25,8 @@ module Reflex.Dom.Old
2525 , elWith'
2626 , emptyElWith
2727 , emptyElWith'
28+ , namedNodeMapGetNames
29+ , nodeClear
2830 , onEventName
2931 , schedulePostBuild
3032 , text'
@@ -44,10 +46,14 @@ import Data.Default
4446import Data.Functor.Misc
4547import Data.Map (Map)
4648import qualified Data.Map as Map
49+import Data.Maybe
50+import Data.Set (Set)
51+import qualified Data.Set as Set
4752import Data.Text
4853import Foreign.JavaScript.TH
4954import GHCJS.DOM.EventM (EventM)
50−import GHCJS.DOM.Node (getParentNode, getPreviousSibling, removeChild, toNode)
55+import GHCJS.DOM.NamedNodeMap as NNM
56+import GHCJS.DOM.Node (getFirstChild, getNodeName, getParentNode, getPreviousSibling, removeChild, toNode)
5157import GHCJS.DOM.Types (IsElement, IsNode)
5258import qualified GHCJS.DOM.Types as DOM
5359import Reflex
@@ -213,3 +219,20 @@ unsafePlaceElement :: MonadWidget t m => DOM.HTMLElement -> m (Element EventResu
213219unsafePlaceElement e = do
214220 placeRawElement e
215221 wrapRawElement e def
222+
223+namedNodeMapGetNames :: DOM.NamedNodeMap -> IO (Set String)
224+namedNodeMapGetNames self = do
225+ l <- NNM.getLength self
226+ let locations = if l == 0 then [] else [0..l-1] -- Can't use 0..l-1 if l is 0 because l is unsigned and will wrap around
227+ liftM (Set.fromList . catMaybes) $ forM locations $ \i -> do
228+ Just n <- NNM.item self i
229+ getNodeName n
230+
231+nodeClear :: IsNode self => self -> IO ()
232+nodeClear n = do
233+ mfc <- getFirstChild n
234+ case mfc of
235+ Nothing -> return ()
236+ Just fc -> do
237+ _ <- removeChild n $ Just fc
238+ nodeClear n