Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Control.Monad.Aff (Aff, Canceler(..), makeAff)
- import Control.Monad.Eff.Class (liftEff)
- import Control.Monad.Eff.Exception (error)
- import DOM (DOM)
- import DOM.Event.EventTarget (addEventListener, eventListener, removeEventListener)
- import DOM.File.FileReader as FR
- import DOM.File.Types (Blob, fileReaderToEventTarget)
- import DOM.HTML.Event.EventTypes as Events
- import Data.Foreign (readString)
- -- | Reads the contents of a DOM API `File` from disk, with the assumption that
- -- | the contents is plain text.
- readAsText ∷ ∀ e. Blob → Aff String
- readAsText blob = makeAff \cb → do
- reader ← liftEff FR.fileReader
- let
- et = fileReaderToEventTarget reader
- listener = eventListener \_ → do
- removeEventListener Events.load listener false et
- r ← runExcept ∘ readString <$> FR.result reader
- cb $ lmap (const (error "A problem occurred while reading a file as text")) r
- addEventListener Events.load listener false et
- FR.readAsText blob reader
- pure (Canceler \_ → liftEff (removeEventListener Events.load listener false et))
Add Comment
Please, Sign In to add comment