mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-21 21:12:32 -05:00
89 lines
2.7 KiB
CoffeeScript
89 lines
2.7 KiB
CoffeeScript
ModalView = require 'views/core/ModalView'
|
|
template = require 'templates/editor/modal/save-version-modal'
|
|
DeltaView = require 'views/editor/DeltaView'
|
|
Patch = require 'models/Patch'
|
|
forms = require 'core/forms'
|
|
|
|
module.exports = class SaveVersionModal extends ModalView
|
|
id: 'save-version-modal'
|
|
template: template
|
|
plain: true
|
|
modalWidthPercent: 60
|
|
|
|
events:
|
|
'click #save-version-button': 'saveChanges'
|
|
'click #cla-link': 'onClickCLALink'
|
|
'click #agreement-button': 'onAgreedToCLA'
|
|
'click #submit-patch-button': 'submitPatch'
|
|
'submit form': 'onSubmitForm'
|
|
|
|
constructor: (options) ->
|
|
super options
|
|
@model = options.model or options.level
|
|
@isPatch = not @model.hasWriteAccess()
|
|
@hasChanges = @model.hasLocalChanges()
|
|
|
|
afterRender: (insertDeltaView=true) ->
|
|
super()
|
|
@$el.find(if me.get('signedCLA') then '#accept-cla-wrapper' else '#save-version-button').hide()
|
|
changeEl = @$el.find('.changes-stub')
|
|
if insertDeltaView
|
|
try
|
|
deltaView = new DeltaView({model: @model})
|
|
@insertSubView(deltaView, changeEl)
|
|
catch e
|
|
console.error 'Couldn\'t create delta view:', e, e.stack
|
|
@$el.find('.commit-message input').attr('placeholder', $.i18n.t('general.commit_msg'))
|
|
|
|
onSubmitForm: (e) ->
|
|
e.preventDefault()
|
|
if @isPatch then @submitPatch() else @saveChanges()
|
|
|
|
saveChanges: ->
|
|
@trigger 'save-new-version', {
|
|
major: @$el.find('#major-version').prop('checked')
|
|
commitMessage: @$el.find('#commit-message').val()
|
|
}
|
|
|
|
submitPatch: ->
|
|
@savingPatchError = false
|
|
forms.clearFormAlerts @$el
|
|
patch = new Patch()
|
|
patch.set 'delta', @model.getDelta()
|
|
patch.set 'commitMessage', @$el.find('#commit-message').val()
|
|
patch.set 'target', {
|
|
'collection': _.string.underscored @model.constructor.className
|
|
'id': @model.id
|
|
}
|
|
errors = patch.validate()
|
|
forms.applyErrorsToForm(@$el, errors) if errors
|
|
res = patch.save()
|
|
return unless res
|
|
@enableModalInProgress(@$el)
|
|
|
|
res.error (jqxhr) =>
|
|
@disableModalInProgress(@$el)
|
|
@savingPatchError = jqxhr.responseJSON?.message or 'Unknown error.'
|
|
@renderSelectors '.save-error-area'
|
|
|
|
res.success =>
|
|
@hide()
|
|
|
|
onClickCLALink: ->
|
|
window.open('/cla', 'cla', 'height=800,width=900')
|
|
|
|
onAgreedToCLA: ->
|
|
@$el.find('#agreement-button').text('Saving').prop('disabled', true)
|
|
$.ajax({
|
|
url: '/db/user/me/agreeToCLA'
|
|
method: 'POST'
|
|
success: @onAgreeSucceeded
|
|
error: @onAgreeFailed
|
|
})
|
|
|
|
onAgreeSucceeded: =>
|
|
@$el.find('#agreement-button').text('Thanks!')
|
|
@$el.find('#save-version-button').show()
|
|
|
|
onAgreeFailed: =>
|
|
@$el.find('#agreement-button').text('Failed').prop('disabled', false)
|