@@ -25,6 +25,8 @@ module Reflex.Dom.Old
26 , emptyElWith
26 , emptyElWith
27 , emptyElWith'
27 , emptyElWith'
28+ , namedNodeMapGetNames
28 , onEventName
30 , onEventName
29 , schedulePostBuild
31 , schedulePostBuild
@@ -44,10 +46,14 @@ import Data.Default
44import Data.Functor.Misc
46import Data.Functor.Misc
45import Data.Map (Map)
47import Data.Map (Map)
46import qualified Data.Map as Map
48import qualified Data.Map as Map
51+import qualified Data.Set as Set
47import Data.Text
52import Data.Text
48import Foreign.JavaScript.TH
53import Foreign.JavaScript.TH
49import GHCJS.DOM.EventM (EventM)
54import GHCJS.DOM.EventM (EventM)
55+import GHCJS.DOM.NamedNodeMap as NNM
50−import GHCJS.DOM.Node (getParentNode, getPreviousSibling, removeChild, toNode)
56+import GHCJS.DOM.Node (getFirstChild, getNodeName, getParentNode, getPreviousSibling, removeChild, toNode)
51import GHCJS.DOM.Types (IsElement, IsNode)
57import GHCJS.DOM.Types (IsElement, IsNode)
52import qualified GHCJS.DOM.Types as DOM
58import qualified GHCJS.DOM.Types as DOM
53import Reflex
59import Reflex
@@ -213,3 +219,20 @@ unsafePlaceElement :: MonadWidget t m => DOM.HTMLElement -> m (Element EventResu
213unsafePlaceElement e = do
219unsafePlaceElement e = do
214 placeRawElement e
220 placeRawElement e
215 wrapRawElement e def
221 wrapRawElement e def
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
231+nodeClear :: IsNode self => self -> IO ()
233+ mfc <- getFirstChild n
235+ Nothing -> return ()
237+ _ <- removeChild n $ Just fc