|
| 1 | +module Web.XHR.XMLHttpRequest |
| 2 | + ( xmlHttpRequest |
| 3 | + , abort |
| 4 | + , getAllResponseHeaders |
| 5 | + , getResponseHeader |
| 6 | + , open |
| 7 | + , open' |
| 8 | + , overrideMimeType |
| 9 | + , send |
| 10 | + , sendString |
| 11 | + , sendDocument |
| 12 | + , sendBlob |
| 13 | + , sendFormData |
| 14 | + , setRequestHeader |
| 15 | + , readyState |
| 16 | + , response |
| 17 | + , responseURL |
| 18 | + , status |
| 19 | + , statusText |
| 20 | + , timeout |
| 21 | + , setTimeout |
| 22 | + , upload |
| 23 | + , withCredentials |
| 24 | + , setWithCredentials |
| 25 | + ) where |
| 26 | + |
| 27 | +import Prelude |
| 28 | + |
| 29 | +import Control.Monad.Eff (kind Effect, Eff) |
| 30 | +import Control.Monad.Eff.Uncurried as Fn |
| 31 | +import DOM.File.Types (Blob) |
| 32 | +import DOM.Node.Types (Document) |
| 33 | +import Data.Enum (toEnum) |
| 34 | +import Data.Foreign (Foreign, toForeign) |
| 35 | +import Data.Maybe (Maybe(..), fromMaybe) |
| 36 | +import Data.Nullable (Nullable, toMaybe, toNullable) |
| 37 | +import Data.Time.Duration (Milliseconds(..)) |
| 38 | +import Unsafe.Coerce (unsafeCoerce) |
| 39 | +import Web.XHR.Types (FormData, ReadyState(..), ResponseType, XHR, XMLHttpRequest, XMLHttpRequestUpload) |
| 40 | + |
| 41 | +xmlHttpRequest :: forall res eff. ResponseType res -> Eff (xhr :: XHR | eff) (XMLHttpRequest res) |
| 42 | +xmlHttpRequest = Fn.runEffFn1 _xmlHttpRequest |
| 43 | + |
| 44 | +abort :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 45 | +abort = Fn.runEffFn1 _abort |
| 46 | + |
| 47 | +getAllResponseHeaders :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) (Maybe String) |
| 48 | +getAllResponseHeaders xhr = toMaybe <$> Fn.runEffFn1 _getAllResponseHeaders xhr |
| 49 | + |
| 50 | +getResponseHeader :: forall res eff. String -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) (Maybe String) |
| 51 | +getResponseHeader header xhr = toMaybe <$> Fn.runEffFn2 _getResponseHeader header xhr |
| 52 | + |
| 53 | +open :: forall res eff. String -> String -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 54 | +open method url xhr = Fn.runEffFn5 _open method url (toNullable Nothing) (toNullable Nothing) xhr |
| 55 | + |
| 56 | +open' :: forall res eff. { method :: String, url :: String, username :: Maybe String, password :: Maybe String } -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 57 | +open' options xhr = Fn.runEffFn5 _open options.method options.url (toNullable options.username) (toNullable options.password) xhr |
| 58 | + |
| 59 | +overrideMimeType :: forall res eff. String -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 60 | +overrideMimeType = Fn.runEffFn2 _overrideMimeType |
| 61 | + |
| 62 | +send :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 63 | +send = Fn.runEffFn2 _send (toForeign (toNullable Nothing)) |
| 64 | + |
| 65 | +sendString :: forall res eff. String -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 66 | +sendString payload xhr = Fn.runEffFn2 _send (toForeign payload) xhr |
| 67 | + |
| 68 | +sendBlob :: forall res eff. Blob -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 69 | +sendBlob payload xhr = Fn.runEffFn2 _send (toForeign payload) xhr |
| 70 | + |
| 71 | +sendFormData :: forall res eff. FormData -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 72 | +sendFormData payload xhr = Fn.runEffFn2 _send (toForeign payload) xhr |
| 73 | + |
| 74 | +sendDocument :: forall res eff. Document -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 75 | +sendDocument payload xhr = Fn.runEffFn2 _send (toForeign payload) xhr |
| 76 | + |
| 77 | +setRequestHeader :: forall res eff. String -> String -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 78 | +setRequestHeader = Fn.runEffFn3 _setRequestHeader |
| 79 | + |
| 80 | +readyState :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) ReadyState |
| 81 | +readyState xhr = toReadyState <$> Fn.runEffFn2 _getProperty "readyState" xhr |
| 82 | + where |
| 83 | + toReadyState :: Foreign -> ReadyState |
| 84 | + toReadyState rs = fromMaybe ReadyStateUnsent $ toEnum (unsafeCoerce rs :: Int) |
| 85 | + |
| 86 | +response :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) (Maybe res) |
| 87 | +response xhr = toResponse <$> Fn.runEffFn2 _getProperty "response" xhr |
| 88 | + where |
| 89 | + toResponse :: Foreign -> Maybe res |
| 90 | + toResponse r = toMaybe (unsafeCoerce r :: Nullable res) |
| 91 | + |
| 92 | +responseURL :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) String |
| 93 | +responseURL xhr = (unsafeCoerce :: Foreign -> String) <$> Fn.runEffFn2 _getProperty "responseURL" xhr |
| 94 | + |
| 95 | +status :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) Int |
| 96 | +status xhr = (unsafeCoerce :: Foreign -> Int) <$> Fn.runEffFn2 _getProperty "status" xhr |
| 97 | + |
| 98 | +statusText :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) String |
| 99 | +statusText xhr = (unsafeCoerce :: Foreign -> String) <$> Fn.runEffFn2 _getProperty "statusText" xhr |
| 100 | + |
| 101 | +timeout :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) Milliseconds |
| 102 | +timeout xhr = toMillis <$> Fn.runEffFn2 _getProperty "statusText" xhr |
| 103 | + where |
| 104 | + toMillis :: Foreign -> Milliseconds |
| 105 | + toMillis m = Milliseconds (unsafeCoerce m) |
| 106 | + |
| 107 | +setTimeout :: forall res eff. Milliseconds -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 108 | +setTimeout (Milliseconds ms) xhr = Fn.runEffFn3 _setProperty "timeout" (toForeign ms) xhr |
| 109 | + |
| 110 | +upload :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) XMLHttpRequestUpload |
| 111 | +upload xhr = (unsafeCoerce :: Foreign -> XMLHttpRequestUpload) <$> Fn.runEffFn2 _getProperty "upload" xhr |
| 112 | + |
| 113 | +withCredentials :: forall res eff. XMLHttpRequest res -> Eff (xhr :: XHR | eff) Boolean |
| 114 | +withCredentials xhr = (unsafeCoerce :: Foreign -> Boolean) <$> Fn.runEffFn2 _getProperty "withCredentials" xhr |
| 115 | + |
| 116 | +setWithCredentials :: forall res eff. Boolean -> XMLHttpRequest res -> Eff (xhr :: XHR | eff) Unit |
| 117 | +setWithCredentials wc xhr = Fn.runEffFn3 _setProperty "withCredentials" (toForeign wc) xhr |
| 118 | + |
| 119 | +foreign import _xmlHttpRequest |
| 120 | + :: forall res eff |
| 121 | + . Fn.EffFn1 (xhr :: XHR | eff) (ResponseType res) (XMLHttpRequest res) |
| 122 | + |
| 123 | +foreign import _abort |
| 124 | + :: forall res eff |
| 125 | + . Fn.EffFn1 (xhr :: XHR | eff) (XMLHttpRequest res) Unit |
| 126 | + |
| 127 | +foreign import _getAllResponseHeaders |
| 128 | + :: forall res eff |
| 129 | + . Fn.EffFn1 (xhr :: XHR | eff) (XMLHttpRequest res) (Nullable String) |
| 130 | + |
| 131 | +foreign import _getResponseHeader |
| 132 | + :: forall res eff |
| 133 | + . Fn.EffFn2 (xhr :: XHR | eff) String (XMLHttpRequest res) (Nullable String) |
| 134 | + |
| 135 | +foreign import _open |
| 136 | + :: forall res eff |
| 137 | + . Fn.EffFn5 (xhr :: XHR | eff) String String (Nullable String) (Nullable String) (XMLHttpRequest res) Unit |
| 138 | + |
| 139 | +foreign import _overrideMimeType |
| 140 | + :: forall res eff |
| 141 | + . Fn.EffFn2 (xhr :: XHR | eff) String (XMLHttpRequest res) Unit |
| 142 | + |
| 143 | +foreign import _send |
| 144 | + :: forall res eff |
| 145 | + . Fn.EffFn2 (xhr :: XHR | eff) Foreign (XMLHttpRequest res) Unit |
| 146 | + |
| 147 | +foreign import _setRequestHeader |
| 148 | + :: forall res eff |
| 149 | + . Fn.EffFn3 (xhr :: XHR | eff) String String (XMLHttpRequest res) Unit |
| 150 | + |
| 151 | +foreign import _setProperty |
| 152 | + :: forall res eff |
| 153 | + . Fn.EffFn3 (xhr :: XHR | eff) String Foreign (XMLHttpRequest res) Unit |
| 154 | + |
| 155 | +foreign import _getProperty |
| 156 | + :: forall res eff |
| 157 | + . Fn.EffFn2 (xhr :: XHR | eff) String (XMLHttpRequest res) Foreign |
0 commit comments