diff options
Diffstat (limited to 'public')
-rw-r--r-- | public/gallery.js | 26 | ||||
-rw-r--r-- | public/style.css | 1 |
2 files changed, 21 insertions, 6 deletions
diff --git a/public/gallery.js b/public/gallery.js index 299d372..9d3b067 100644 --- a/public/gallery.js +++ b/public/gallery.js @@ -1,14 +1,25 @@ 'use strict' +let callActive = false +let callFaulty = false + function call(method, params) { - // TODO: Make it apparent when results result in errors: - // - With responseType == "json", m.request() always expects JSON, - // and error.message is null if it fails, but we can handle it manually. - // - Go can wrap all errors into trivial strings before writing. + // XXX: At least with POST, unsuccessful requests result + // in catched errors containing Errors with a null message. + // This is an issue within XMLHttpRequest. + callActive++ return m.request({ method: "POST", url: `/api/${method}`, body: params, + }).then(result => { + callActive-- + callFaulty = false + return result + }).catch(error => { + callActive-- + callFaulty = true + throw error }) } @@ -72,8 +83,11 @@ let Header = { return m('.header', {}, [ m('nav', main), m('nav', context), - // TODO: End it with an activity indicator. - m('.activity', '☺'), + callFaulty + ? m('.activity.error[title=Error]', '●') + : callActive + ? m('.activity[title=Busy]', '●') + : m('.activity[title=Idle]', '○'), ]) }, } diff --git a/public/style.css b/public/style.css index e0fc004..1bdeb3f 100644 --- a/public/style.css +++ b/public/style.css @@ -22,6 +22,7 @@ a { color: inherit; } background: #fff linear-gradient(#eee, #fff); } .header nav a.active, .header nav a:hover { padding-bottom: .4rem; } .header .activity { padding: .25rem .5rem; align-self: center; color: #fff; } +.header .activity.error { color: #f00; } .sidebar { padding: .25rem .5rem; background: var(--shade-color); border-right: 1px solid #ccc; overflow: auto; |