mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-25 08:38:09 -05:00
83 lines
2.9 KiB
CoffeeScript
83 lines
2.9 KiB
CoffeeScript
|
View = require 'views/kinds/ModalView'
|
||
|
template = require 'templates/modal/auth'
|
||
|
{loginUser, createUser, me} = require 'lib/auth'
|
||
|
forms = require 'lib/forms'
|
||
|
User = require 'models/User'
|
||
|
application = require 'application'
|
||
|
|
||
|
module.exports = class AuthModalView extends View
|
||
|
id: "auth-modal"
|
||
|
template: template
|
||
|
mode: 'login' # or 'signup'
|
||
|
|
||
|
events:
|
||
|
# login buttons
|
||
|
"click #switch-to-signup-button": "onSignupInstead"
|
||
|
"click #signup-confirm-age": "checkAge"
|
||
|
'submit': 'onSubmitForm' # handles both submit buttons
|
||
|
|
||
|
subscriptions:
|
||
|
'server-error': 'onServerError'
|
||
|
'logging-in-with-facebook': 'onLoggingInWithFacebook'
|
||
|
|
||
|
getRenderData: ->
|
||
|
c = super()
|
||
|
c.showRequiredError = @options.showRequiredError
|
||
|
c.title = {0: "short", 1: "long"}[me.get('testGroupNumber') % 2]
|
||
|
c.descriptionOn = {0: "yes", 1: "no"}[Math.floor(me.get('testGroupNumber')/2) % 2]
|
||
|
if @mode is 'signup'
|
||
|
application.tracker.identify authModalTitle: c.title
|
||
|
application.tracker.trackEvent 'Started Signup', authModalTitle: c.title, descriptionOn: c.descriptionOn
|
||
|
c.mode = @mode
|
||
|
c.formValues = @previousFormInputs or {}
|
||
|
c
|
||
|
|
||
|
afterInsert: ->
|
||
|
super()
|
||
|
_.delay application.router.renderLoginButtons, 500
|
||
|
|
||
|
onSignupInstead: (e) ->
|
||
|
@mode = 'signup'
|
||
|
@previousFormInputs = forms.formToObject @$el
|
||
|
@render()
|
||
|
_.delay application.router.renderLoginButtons, 500
|
||
|
|
||
|
onSubmitForm: (e) ->
|
||
|
e.preventDefault()
|
||
|
if @mode is 'login' then @loginAccount() else @createAccount()
|
||
|
false
|
||
|
|
||
|
checkAge: (e) ->
|
||
|
$("#signup-button", @$el).prop 'disabled', not $(e.target).prop('checked')
|
||
|
|
||
|
loginAccount: ->
|
||
|
forms.clearFormAlerts(@$el)
|
||
|
userObject = forms.formToObject @$el
|
||
|
res = tv4.validateMultiple userObject, User.schema
|
||
|
return forms.applyErrorsToForm(@$el, res.errors) unless res.valid
|
||
|
@enableModalInProgress(@$el) # TODO: part of forms
|
||
|
loginUser(userObject)
|
||
|
|
||
|
createAccount: ->
|
||
|
forms.clearFormAlerts(@$el)
|
||
|
userObject = forms.formToObject @$el
|
||
|
delete userObject.subscribe
|
||
|
delete userObject["confirm-age"]
|
||
|
for key, val of me.attributes when key in ["preferredLanguage", "testGroupNumber", "dateCreated", "wizardColor1", "name", "music", "volume", "emails"]
|
||
|
userObject[key] ?= val
|
||
|
subscribe = @$el.find('#signup-subscribe').prop('checked')
|
||
|
userObject.emails ?= {}
|
||
|
userObject.emails.generalNews ?= {}
|
||
|
userObject.emails.generalNews.enabled = subscribe
|
||
|
res = tv4.validateMultiple userObject, User.schema
|
||
|
return forms.applyErrorsToForm(@$el, res.errors) unless res.valid
|
||
|
window.tracker?.trackEvent 'Finished Signup'
|
||
|
@enableModalInProgress(@$el)
|
||
|
createUser userObject, null, window.nextLevelURL
|
||
|
|
||
|
onLoggingInWithFacebook: (e) ->
|
||
|
modal = $('.modal:visible', @$el)
|
||
|
@enableModalInProgress(modal) # TODO: part of forms
|
||
|
|
||
|
onServerError: (e) -> # TODO: work error handling into a separate forms system
|
||
|
@disableModalInProgress(@$el)
|