on develop help sign in
Add access to files for inputElement.
commit4c028dc91323a12536723fd9d09fc7267d27696d authorLuigy Leon <luigy@outlook.com> dateSat 27 Aug 2016, 08:55 (10 years ago) parentf0d16ec
3 files changed+11
src/Reflex/Dom/Builder/Class.hs+2 src/Reflex/Dom/Builder/Immediate.hs+8 src/Reflex/Dom/Builder/Static.hs+1
src/Reflex/Dom/Builder/Class.hs+2
@@ -46,6 +46,7 @@ import Data.Text (Text)
4646import Data.Traversable
4747import Data.Type.Coercion
4848import GHC.Exts (Constraint)
49+import GHCJS.DOM.File (File)
4950
5051class Default (EventSpec d EventResult) => DomSpace d where
5152 type EventSpec d :: (EventTag -> *) -> *
@@ -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 :: Event t [File]
264266 }
265267
266268data TextAreaElementConfig er t m
src/Reflex/Dom/Builder/Immediate.hs+8
@@ -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 File
4950import qualified GHCJS.DOM.HTMLInputElement as Input
5051import qualified GHCJS.DOM.HTMLSelectElement as Select
5152import qualified GHCJS.DOM.HTMLTextAreaElement as TextArea
@@ -288,6 +289,12 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
288289 [ False <$ Reflex.select (_element_events e) (WrapArg Blur)
289290 , True <$ Reflex.select (_element_events e) (WrapArg Focus)
290291 ]
292+ files <- wrapDomEvent domInputElement (`on` Element.change) $ do
293+ -- TODO emit files only for `file` input type
294+ -- ghcjs-dom > 0.3 exposes Input.getType
295+ mfiles <- Input.getFiles domInputElement
296+ let getMyFiles xs = fmap catMaybes . mapM (File.item xs) . flip take [0..] . fromIntegral =<< File.getLength xs
297+ maybe (return []) getMyFiles mfiles
291298 return $ InputElement
292299 { _inputElement_value = v
293300 , _inputElement_checked = uniqDyn c
@@ -296,6 +303,7 @@ instance SupportsImmediateDomBuilder t m => DomBuilder t (ImmediateDomBuilderT t
296303 , _inputElement_hasFocus = hasFocus
297304 , _inputElement_element = e
298305 , _inputElement_raw = domInputElement
306+ , _inputElement_files = files
299307 }
300308 {-# INLINABLE textAreaElement #-}
301309 textAreaElement cfg = do --TODO
src/Reflex/Dom/Builder/Static.hs+1
@@ -176,6 +176,7 @@ instance SupportsStaticDomBuilder t m => DomBuilder t (StaticDomBuilderT t m) wh
176176 , _inputElement_hasFocus = hasFocus
177177 , _inputElement_element = e
178178 , _inputElement_raw = ()
179+ , _inputElement_files = never
179180 }
180181 {-# INLINABLE textAreaElement #-}
181182 textAreaElement cfg = do