diff --git a/redesign/error.nim b/redesign/error.nim index fb96758..af04e73 100644 --- a/redesign/error.nim +++ b/redesign/error.nim @@ -40,4 +40,23 @@ when defined(js): let e = error.get() if (e.errorFields.len == 1 and e.errorFields[0] == name) or isLast: p(class="form-input-hint"): - text e.message \ No newline at end of file + text e.message + + template postFinished*(onSuccess: untyped): untyped = + state.loading = false + let status = httpStatus.HttpCode + if status == Http200: + onSuccess + else: + # TODO: Karax should pass the content-type... + try: + let parsed = parseJson($response) + let error = to(parsed, PostError) + + state.error = some(error) + except: + kout(getCurrentExceptionMsg().cstring) + state.error = some(PostError( + errorFields: @[], + message: "Unknown error occurred." + )) \ No newline at end of file diff --git a/redesign/login.nim b/redesign/login.nim index 94a9228..6485906 100644 --- a/redesign/login.nim +++ b/redesign/login.nim @@ -17,24 +17,9 @@ when defined(js): error: Option[PostError] proc onLogInPost(httpStatus: int, response: kstring, state: LoginModal) = - state.loading = false - let status = httpStatus.HttpCode - if status == Http200: + postFinished: state.shown = false state.onLogIn() - else: - # TODO: Karax should pass the content-type... - try: - let parsed = parseJson($response) - let error = to(parsed, PostError) - - state.error = some(error) - except: - kout(getCurrentExceptionMsg().cstring) - state.error = some(PostError( - errorFields: @[], - message: "Unknown error occurred." - )) proc onLogInClick(ev: Event, n: VNode, state: LoginModal) = state.loading = true diff --git a/redesign/replybox.nim b/redesign/replybox.nim index b92dc88..04852f2 100644 --- a/redesign/replybox.nim +++ b/redesign/replybox.nim @@ -40,24 +40,9 @@ when defined(js): state.shown = true proc onPreviewPost(httpStatus: int, response: kstring, state: ReplyBox) = - state.loading = false - let status = httpStatus.HttpCode - if status == Http200: + postFinished: kout(response) state.rendering = some[kstring](response) - else: - # TODO: login has similar code, abstract this. - try: - let parsed = parseJson($response) - let error = to(parsed, PostError) - - state.error = some(error) - except: - kout(getCurrentExceptionMsg().cstring) - state.error = some(PostError( - errorFields: @[], - message: "Unknown error occurred." - )) proc onPreviewClick(e: Event, n: VNode, state: ReplyBox) = state.preview = true @@ -71,25 +56,10 @@ when defined(js): (s: int, r: kstring) => onPreviewPost(s, r, state)) proc onReplyPost(httpStatus: int, response: kstring, state: ReplyBox) = - state.loading = false - let status = httpStatus.HttpCode - if status == Http200: + postFinished: state.text = "" state.shown = false state.onPost(parseJson($response).getInt()) - else: - # TODO: login has similar code, abstract this. - try: - let parsed = parseJson($response) - let error = to(parsed, PostError) - - state.error = some(error) - except: - kout(getCurrentExceptionMsg().cstring) - state.error = some(PostError( - errorFields: @[], - message: "Unknown error occurred." - )) proc onReplyClick(e: Event, n: VNode, state: ReplyBox, thread: Thread, replyingTo: Option[Post]) =