codecombat/app/lib/errors.coffee
2014-01-03 10:32:13 -08:00

48 lines
1.6 KiB
CoffeeScript

errorModalTemplate = require('templates/modal/error')
{applyErrorsToForm} = require('lib/forms')
module.exports.parseServerError = (text) ->
try
error = JSON.parse(text) or {message:"Unknown error."}
catch SyntaxError
error = {message:text or "Unknown error."}
error = error[0] if _.isArray(error)
error
module.exports.genericFailure = (jqxhr) ->
Backbone.Mediator.publish('server-error', {response:jqxhr})
return connectionFailure() if not jqxhr.status
error = module.exports.parseServerError(jqxhr.responseText)
message = error.message
message = error.property + ' ' + message if error.property
res = errorModalTemplate(
status:jqxhr.status
statusText:jqxhr.statusText
message: message
)
console.warn(jqxhr.status, jqxhr.statusText, error)
existingForm = $('.form-inline:visible:first')
if existingForm[0]
missingErrors = applyErrorsToForm(existingForm, [error])
for error in missingErrors
existingForm.append($('<div class="alert"></div>').text(error.message))
else
showErrorModal(res)
module.exports.backboneFailure = (model, jqxhr, options) ->
module.exports.genericFailure(jqxhr)
module.exports.connectionFailure = connectionFailure = ->
html = errorModalTemplate(
status: 0
statusText:'Connection Gone'
message: 'No response from the CoCo servers, captain.'
)
showErrorModal(html)
showErrorModal = (html) ->
# TODO: make a views/modal/error_modal view for this to use so the template can reuse templates/modal/modal_base?
$('#modal-wrapper').html(html)
$('.modal:visible').modal('hide')
$('#modal-error').modal('show')