on develop help sign in
Merge pull request #90 from reflex-frp/ll-input-element-files
b10b71aRyan Trinkle
src/Reflex/Dom/Builder/Class.hs+2
@@ -51,6 +51,7 @@ class Default (EventSpec d EventResult) => DomSpace d where
51 type EventSpec d :: (EventTag -> *) -> *
51 type EventSpec d :: (EventTag -> *) -> *
52 type RawTextNode d :: *
52 type RawTextNode d :: *
53 type RawElement d :: *
53 type RawElement d :: *
54+ type RawFile d :: *
54 type RawInputElement d :: *
55 type RawInputElement d :: *
55 type RawTextAreaElement d :: *
56 type RawTextAreaElement d :: *
56 type RawSelectElement d :: *
57 type RawSelectElement d :: *
@@ -261,6 +262,7 @@ data InputElement er d t
261 , _inputElement_hasFocus :: Dynamic t Bool
262 , _inputElement_hasFocus :: Dynamic t Bool
262 , _inputElement_element :: Element er d t
263 , _inputElement_element :: Element er d t
263 , _inputElement_raw :: RawInputElement d
264 , _inputElement_raw :: RawInputElement d
265+ , _inputElement_files :: Dynamic t [RawFile d]
264 }
266 }
265
267
266data TextAreaElementConfig er t m
268data TextAreaElementConfig er t m
src/Reflex/Dom/Builder/Immediate.hs+7
@@ -46,6 +46,7 @@ import qualified GHCJS.DOM.Element as Element
46import qualified GHCJS.DOM.Event as Event
46import qualified GHCJS.DOM.Event as Event
47import GHCJS.DOM.EventM (EventM, event, on)
47import GHCJS.DOM.EventM (EventM, event, on)
48import qualified GHCJS.DOM.EventM as DOM
48import qualified GHCJS.DOM.EventM as DOM
49+import qualified GHCJS.DOM.FileList as FileList
49import qualified GHCJS.DOM.HTMLInputElement as Input
50import qualified GHCJS.DOM.HTMLInputElement as Input
50import qualified GHCJS.DOM.HTMLSelectElement as Select
51import qualified GHCJS.DOM.HTMLSelectElement as Select
51import qualified GHCJS.DOM.HTMLTextAreaElement as TextArea
52import qualified GHCJS.DOM.HTMLTextAreaElement as TextArea
@@ -201,6 +202,7 @@ instance DomSpace GhcjsDomSpace where
201 type EventSpec GhcjsDomSpace = GhcjsEventSpec
202 type EventSpec GhcjsDomSpace = GhcjsEventSpec
202 type RawTextNode GhcjsDomSpace = DOM.Text
203 type RawTextNode GhcjsDomSpace = DOM.Text
203 type RawElement GhcjsDomSpace = DOM.HTMLElement
204 type RawElement GhcjsDomSpace = DOM.HTMLElement
205+ type RawFile GhcjsDomSpace = DOM.File
204 type RawInputElement GhcjsDomSpace = DOM.HTMLInputElement
206 type RawInputElement GhcjsDomSpace = DOM.HTMLInputElement
205 type RawTextAreaElement GhcjsDomSpace = DOM.HTMLTextAreaElement
207 type RawTextAreaElement GhcjsDomSpace = DOM.HTMLTextAreaElement
206 type RawSelectElement GhcjsDomSpace = DOM.HTMLSelectElement
208 type RawSelectElement GhcjsDomSpace = DOM.HTMLSelectElement
@@ -288,6 +290,10 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
288 [ False <$ Reflex.select (_element_events e) (WrapArg Blur)
290 [ False <$ Reflex.select (_element_events e) (WrapArg Blur)
289 , True <$ Reflex.select (_element_events e) (WrapArg Focus)
291 , True <$ Reflex.select (_element_events e) (WrapArg Focus)
290 ]
292 ]
293+ files <- holdDyn mempty <=< wrapDomEvent domInputElement (`on` Element.change) $ do
294+ mfiles <- Input.getFiles domInputElement
295+ let getMyFiles xs = fmap catMaybes . mapM (FileList.item xs) . flip take [0..] . fromIntegral =<< FileList.getLength xs
296+ maybe (return []) getMyFiles mfiles
291 return $ InputElement
297 return $ InputElement
292 { _inputElement_value = v
298 { _inputElement_value = v
293 , _inputElement_checked = uniqDyn c
299 , _inputElement_checked = uniqDyn c
@@ -296,6 +302,7 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
296 , _inputElement_hasFocus = hasFocus
302 , _inputElement_hasFocus = hasFocus
297 , _inputElement_element = e
303 , _inputElement_element = e
298 , _inputElement_raw = domInputElement
304 , _inputElement_raw = domInputElement
305+ , _inputElement_files = files
299 }
306 }
300 {-# INLINABLE textAreaElement #-}
307 {-# INLINABLE textAreaElement #-}
301 textAreaElement cfg = do --TODO
308 textAreaElement cfg = do --TODO
src/Reflex/Dom/Builder/Static.hs+2
@@ -130,6 +130,7 @@ instance DomSpace StaticDomSpace where
130 type EventSpec StaticDomSpace = StaticEventSpec
130 type EventSpec StaticDomSpace = StaticEventSpec
131 type RawTextNode StaticDomSpace = ()
131 type RawTextNode StaticDomSpace = ()
132 type RawElement StaticDomSpace = ()
132 type RawElement StaticDomSpace = ()
133+ type RawFile StaticDomSpace = ()
133 type RawInputElement StaticDomSpace = ()
134 type RawInputElement StaticDomSpace = ()
134 type RawTextAreaElement StaticDomSpace = ()
135 type RawTextAreaElement StaticDomSpace = ()
135 type RawSelectElement StaticDomSpace = ()
136 type RawSelectElement StaticDomSpace = ()
@@ -176,6 +177,7 @@ instance SupportsStaticDomBuilder t m => DomBuilder t (StaticDomBuilderT t m) wh
176 , _inputElement_hasFocus = hasFocus
177 , _inputElement_hasFocus = hasFocus
177 , _inputElement_element = e
178 , _inputElement_element = e
178 , _inputElement_raw = ()
179 , _inputElement_raw = ()
180+ , _inputElement_files = constDyn mempty
179 }
181 }
180 {-# INLINABLE textAreaElement #-}
182 {-# INLINABLE textAreaElement #-}
181 textAreaElement cfg = do
183 textAreaElement cfg = do