summaryrefslogtreecommitdiff
path: root/src/web/app/common/scripts/api.ls
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2016-12-29 07:49:51 +0900
committersyuilo <syuilotan@yahoo.co.jp>2016-12-29 07:49:51 +0900
commitb3f42e62af698a67c2250533c437569559f1fdf9 (patch)
treecdf6937576e99cccf85e6fa3aa8860a1173c7cfb /src/web/app/common/scripts/api.ls
downloadsharkey-b3f42e62af698a67c2250533c437569559f1fdf9.tar.gz
sharkey-b3f42e62af698a67c2250533c437569559f1fdf9.tar.bz2
sharkey-b3f42e62af698a67c2250533c437569559f1fdf9.zip
Initial commit :four_leaf_clover:
Diffstat (limited to 'src/web/app/common/scripts/api.ls')
-rw-r--r--src/web/app/common/scripts/api.ls67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/web/app/common/scripts/api.ls b/src/web/app/common/scripts/api.ls
new file mode 100644
index 0000000000..0656a56168
--- /dev/null
+++ b/src/web/app/common/scripts/api.ls
@@ -0,0 +1,67 @@
+riot = require \riot
+
+spinner = null
+pending = 0
+
+net = riot.observable!
+
+riot.mixin \net do
+ net: net
+
+log = (riot.mixin \log).log
+
+module.exports = (i, endpoint, data) ->
+ pending++
+
+ if i? and typeof i == \object then i = i.token
+
+ body = []
+
+ # append user token when signed in
+ if i? then body.push "i=#i"
+
+ for k, v of data
+ if v != undefined
+ v = encodeURIComponent v
+ body.push "#k=#v"
+
+ opts =
+ method: \POST
+ headers:
+ 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
+ body: body.join \&
+
+ if endpoint == \signin
+ opts.credentials = \include
+
+ ep = if (endpoint.index-of '://') > -1
+ then endpoint
+ else "#{CONFIG.api.url}/#{endpoint}"
+
+ if pending == 1
+ spinner := document.create-element \div
+ ..set-attribute \id \wait
+ document.body.append-child spinner
+
+ new Promise (resolve, reject) ->
+ timer = set-timeout ->
+ net.trigger \detected-slow-network
+ , 5000ms
+
+ log "API: #{ep}"
+
+ fetch ep, opts
+ .then (res) ->
+ pending--
+ clear-timeout timer
+ if pending == 0
+ spinner.parent-node.remove-child spinner
+
+ if res.status == 200
+ res.json!.then resolve
+ else if res.status == 204
+ resolve!
+ else
+ res.json!.then (err) ->
+ reject err.error
+ .catch reject