@@ -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)
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
300 {-# INLINABLE textAreaElement #-}
307 {-# INLINABLE textAreaElement #-}
301 textAreaElement cfg = do --TODO
308 textAreaElement cfg = do --TODO