on develop help sign in
Merge pull request #90 from reflex-frp/ll-input-element-files

Add access to files in InputElement

commitb10b71aeede97a087d13a17bf15c3481f6912234 authorRyan Trinkle <ryan.trinkle@gmail.com> dateMon 29 Aug 2016, 16:06 (10 years ago) parentf0d16ec3697ac3
3 files changed+11
src/Reflex/Dom/Builder/Class.hs+2 src/Reflex/Dom/Builder/Immediate.hs+7 src/Reflex/Dom/Builder/Static.hs+2
src/Reflex/Dom/Builder/Class.hs+2
@@ -51,6 +51,7 @@ class Default (EventSpec d EventResult) => DomSpace d where
5151 type EventSpec d :: (EventTag -> *) -> *
5252 type RawTextNode d :: *
5353 type RawElement d :: *
54+ type RawFile d :: *
5455 type RawInputElement d :: *
5556 type RawTextAreaElement d :: *
5657 type RawSelectElement d :: *
@@ -261,6 +262,7 @@ data InputElement er d t
261262 , _inputElement_hasFocus :: Dynamic t Bool
262263 , _inputElement_element :: Element er d t
263264 , _inputElement_raw :: RawInputElement d
265+ , _inputElement_files :: Dynamic t [RawFile d]
264266 }
265267
266268data TextAreaElementConfig er t m
src/Reflex/Dom/Builder/Immediate.hs+7
@@ -46,6 +46,7 @@ import qualified GHCJS.DOM.Element as Element
4646import qualified GHCJS.DOM.Event as Event
4747import GHCJS.DOM.EventM (EventM, event, on)
4848import qualified GHCJS.DOM.EventM as DOM
49+import qualified GHCJS.DOM.FileList as FileList
4950import qualified GHCJS.DOM.HTMLInputElement as Input
5051import qualified GHCJS.DOM.HTMLSelectElement as Select
5152import qualified GHCJS.DOM.HTMLTextAreaElement as TextArea
@@ -201,6 +202,7 @@ instance DomSpace GhcjsDomSpace where
201202 type EventSpec GhcjsDomSpace = GhcjsEventSpec
202203 type RawTextNode GhcjsDomSpace = DOM.Text
203204 type RawElement GhcjsDomSpace = DOM.HTMLElement
205+ type RawFile GhcjsDomSpace = DOM.File
204206 type RawInputElement GhcjsDomSpace = DOM.HTMLInputElement
205207 type RawTextAreaElement GhcjsDomSpace = DOM.HTMLTextAreaElement
206208 type RawSelectElement GhcjsDomSpace = DOM.HTMLSelectElement
@@ -288,6 +290,10 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
288290 [ False <$ Reflex.select (_element_events e) (WrapArg Blur)
289291 , True <$ Reflex.select (_element_events e) (WrapArg Focus)
290292 ]
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
291297 return $ InputElement
292298 { _inputElement_value = v
293299 , _inputElement_checked = uniqDyn c
@@ -296,6 +302,7 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
296302 , _inputElement_hasFocus = hasFocus
297303 , _inputElement_element = e
298304 , _inputElement_raw = domInputElement
305+ , _inputElement_files = files
299306 }
300307 {-# INLINABLE textAreaElement #-}
301308 textAreaElement cfg = do --TODO
src/Reflex/Dom/Builder/Static.hs+2
@@ -130,6 +130,7 @@ instance DomSpace StaticDomSpace where
130130 type EventSpec StaticDomSpace = StaticEventSpec
131131 type RawTextNode StaticDomSpace = ()
132132 type RawElement StaticDomSpace = ()
133+ type RawFile StaticDomSpace = ()
133134 type RawInputElement StaticDomSpace = ()
134135 type RawTextAreaElement StaticDomSpace = ()
135136 type RawSelectElement StaticDomSpace = ()
@@ -176,6 +177,7 @@ instance SupportsStaticDomBuilder t m => DomBuilder t (StaticDomBuilderT t m) wh
176177 , _inputElement_hasFocus = hasFocus
177178 , _inputElement_element = e
178179 , _inputElement_raw = ()
180+ , _inputElement_files = constDyn mempty
179181 }
180182 {-# INLINABLE textAreaElement #-}
181183 textAreaElement cfg = do