0 | module HTTP.API.Client.FFI
3 | import Data.Buffer.Core
4 | import Data.ByteString
5 | import Data.Linear.Token
8 | import Web.Internal.Types
12 | %foreign "javascript:lambda:x=>x.length"
13 | prim__buflen : Buffer -> Bits32
15 | %foreign "browser:lambda:(x,a,b,w)=>x.append(a,b)"
16 | prim__append : FormData -> String -> String -> PrimIO ()
18 | %foreign "browser:lambda:(x,a,b,w)=>x.append(a,b)"
19 | prim__appendBlob : FormData -> String -> Blob -> PrimIO ()
21 | %foreign "browser:lambda:(x,a,b,w)=>x.append(a,b)"
22 | prim__appendFile : FormData -> String -> File -> PrimIO ()
24 | %foreign "browser:lambda:(x,a,b,w)=>x.append(a,new Blob(b))"
25 | prim__appendBuffer : FormData -> String -> Buffer -> PrimIO ()
27 | %foreign "browser:lambda:(x,w)=>x.responseText"
28 | prim__responseText : XMLHttpRequest -> PrimIO String
30 | %foreign "browser:lambda:(x,w)=>x.status"
31 | prim__status : XMLHttpRequest -> PrimIO Bits16
33 | %foreign "browser:lambda:(x,w)=>x.send()"
34 | prim__send : XMLHttpRequest -> PrimIO ()
36 | %foreign "browser:lambda:(x,s,w)=>x.send(s)"
37 | prim__sendTxt : XMLHttpRequest -> String -> PrimIO ()
39 | %foreign "browser:lambda:(x,s,w)=>x.send(s)"
40 | prim__sendBuf : XMLHttpRequest -> Buffer -> PrimIO ()
42 | %foreign "browser:lambda:(x,s,w)=>x.send(s)"
43 | prim__sendBlob : XMLHttpRequest -> Blob -> PrimIO ()
45 | %foreign "browser:lambda:(w)=> new FormData()"
46 | prim__newFD : PrimIO FormData
48 | %foreign "browser:lambda:(x,s,w)=>x.send(s)"
49 | prim__sendFD : XMLHttpRequest -> FormData -> PrimIO ()
51 | %foreign "browser:lambda:(w)=> new XMLHttpRequest()"
52 | prim__request : PrimIO XMLHttpRequest
54 | %foreign "browser:lambda:(x,w)=>x.readyState"
55 | prim__readyState : XMLHttpRequest -> PrimIO Bits16
57 | %foreign "browser:lambda:(x,v,w)=>{x.timeout = v}"
58 | prim__setTimeout : XMLHttpRequest -> Bits32 -> PrimIO ()
60 | %foreign "browser:lambda:(x,w)=>x.abort()"
61 | prim__abort : XMLHttpRequest -> PrimIO ()
63 | %foreign "browser:lambda:(x,me,url,w)=>x.open(me,url)"
64 | prim__open : XMLHttpRequest -> String -> String -> PrimIO ()
66 | %foreign "browser:lambda:(x,a,b,w)=>x.setRequestHeader(a,b)"
67 | prim__setRequestHeader : XMLHttpRequest -> (h,v : String) -> PrimIO ()
70 | %foreign "browser:lambda:x=>x.bubbles?1:0"
71 | bubbles : Event -> Bool
74 | %foreign "browser:lambda:x=>x.cancelable?1:0"
75 | cancelable : Event -> Bool
77 | %foreign "browser:lambda:(x,s,f,w)=>x.addEventListener(s,\e => f(e)(w))"
78 | prim__addlistener : EventTarget -> String -> (Event -> PrimIO ()) -> PrimIO ()
80 | %foreign "browser:lambda:(x,w)=>x.preventDefault()"
81 | prim__preventDefault : Event -> PrimIO ()
83 | %foreign "browser:lambda:(x,w)=>x.stopPropagation()"
84 | prim__stopPropagation : Event -> PrimIO ()
91 | xmlhttpRequest : IO1 XMLHttpRequest
92 | xmlhttpRequest = ffi prim__request
95 | status : XMLHttpRequest -> IO1 Bits16
96 | status x = ffi $
prim__status x
99 | abort : XMLHttpRequest -> IO1 ()
100 | abort x = ffi $
prim__abort x
103 | opn : XMLHttpRequest -> Method -> URI -> IO1 ()
104 | opn x m u = ffi $
prim__open x (show m) "\{u}"
107 | send : XMLHttpRequest -> IO1 ()
108 | send x = ffi $
prim__send x
111 | sendTxt : XMLHttpRequest -> String -> IO1 ()
112 | sendTxt x s = ffi $
prim__sendTxt x s
115 | sendBuffer : XMLHttpRequest -> Buffer -> IO1 ()
116 | sendBuffer x s = ffi $
prim__sendBuf x s
119 | sendBlob : XMLHttpRequest -> Blob -> IO1 ()
120 | sendBlob x s = ffi $
prim__sendBlob x s
123 | sendFD : XMLHttpRequest -> FormData -> IO1 ()
124 | sendFD x s = ffi $
prim__sendFD x s
127 | setRequestHeader : XMLHttpRequest -> String -> ByteString -> IO1 ()
128 | setRequestHeader x n v = ffi $
prim__setRequestHeader x n (toString v)
131 | setRequestHeaderP : XMLHttpRequest -> (String, ByteString) -> IO1 ()
132 | setRequestHeaderP x (n,v) = setRequestHeader x n v
135 | responseBytes : XMLHttpRequest -> IO1 ByteString
136 | responseBytes x t =
137 | let str # t := ffi (prim__responseText x) t in fromString str # t
140 | newFD : IO1 FormData
141 | newFD = ffi prim__newFD
144 | appendTxt : FormData -> (name,value : String) -> IO1 ()
145 | appendTxt fd n v = ffi $
prim__append fd n v
148 | appendBlob : FormData -> (name : String) -> Blob -> IO1 ()
149 | appendBlob fd n v = ffi $
prim__appendBlob fd n v
152 | appendFile : FormData -> (name : String) -> File -> IO1 ()
153 | appendFile fd n v = ffi $
prim__appendFile fd n v
156 | appendBytes : FormData -> (name : String) -> ByteString -> IO1 ()
157 | appendBytes x n bs t =
158 | let buf # t := ioToF1 (toBuffer bs) t
159 | in ffi (prim__appendBuffer x n buf) t
162 | addEventListener : EventTarget -> String -> (Event -> IO1 ()) -> IO1 ()
163 | addEventListener et ev cb = ffi $
prim__addlistener et ev (primRun . cb)
166 | preventDefault : Event -> IO1 ()
167 | preventDefault ev = ffi $
prim__preventDefault ev
170 | stopPropagation : Event -> IO1 ()
171 | stopPropagation ev = ffi $
prim__stopPropagation ev