diff --git a/assets/images/ui/bubbles-spinner.svg b/assets/images/ui/bubbles-spinner.svg new file mode 100644 index 00000000..abea1057 --- /dev/null +++ b/assets/images/ui/bubbles-spinner.svg @@ -0,0 +1,29 @@ + diff --git a/assets/images/ui/round-spinner.svg b/assets/images/ui/round-spinner.svg new file mode 100644 index 00000000..d9501046 --- /dev/null +++ b/assets/images/ui/round-spinner.svg @@ -0,0 +1,26 @@ + diff --git a/assets/scripts/app/controllers/env_var.coffee b/assets/scripts/app/controllers/env_var.coffee index f2c55777..ee46f294 100644 --- a/assets/scripts/app/controllers/env_var.coffee +++ b/assets/scripts/app/controllers/env_var.coffee @@ -1,5 +1,14 @@ -Travis.EnvVarController = Ember.ObjectController.extend +require 'travis/validations' + +Travis.EnvVarController = Ember.ObjectController.extend Travis.Validations, isEditing: false + isDeleting: false + + validates: + name: ['presence'] + + actionType: 'Save' + showValueField: Ember.computed.alias('public') value: ( (key, value) -> if arguments.length == 2 @@ -13,7 +22,11 @@ Travis.EnvVarController = Ember.ObjectController.extend actions: delete: -> - @get('model').deleteRecord() + return if @get('isDeleting') + @set('isDeleting', true) + + deletingDone = => @set('isDeleting', false) + @get('model').deleteRecord().then deletingDone, deletingDone edit: -> @set('isEditing', true) @@ -23,8 +36,17 @@ Travis.EnvVarController = Ember.ObjectController.extend @get('model').revert() save: -> - env_var = @get('model') + return if @get('isSaving') + @set('isSaving', true) - # TODO: handle errors - env_var.save().then => - @set('isEditing', false) + if @isValid() + env_var = @get('model') + + # TODO: handle errors + env_var.save().then => + @set('isEditing', false) + @set('isSaving', false) + , => + @set('isSaving', false) + else + @set('isSaving', false) diff --git a/assets/scripts/app/controllers/env_var_new.coffee b/assets/scripts/app/controllers/env_var_new.coffee index b65c3543..2aac40e2 100644 --- a/assets/scripts/app/controllers/env_var_new.coffee +++ b/assets/scripts/app/controllers/env_var_new.coffee @@ -1,20 +1,41 @@ -Travis.EnvVarsNewController = Travis.Controller.extend - needs: ['repoSettings'] - repo: Ember.computed.alias('controllers.repoSettings.model') +require 'travis/validations' + +Travis.EnvVarsNewController = Travis.Controller.extend Travis.Validations, + needs: ['repo'] + repo: Ember.computed.alias('controllers.repo.repo') + + validates: + name: ['presence'] + + actionType: 'Add' + showValueField: true + + reset: -> + @setProperties(name: null, value: null, public: null) actions: cancel: -> + @reset() @transitionToRoute('env_vars') save: -> - console.log(@get('repo.id')) - env_var = Travis.EnvVar.create( - name: @get('name') - value: @get('value') - public: @get('public') - repo: @get('repo') - ) + return if @get('isSaving') + @set('isSaving', true) - self = this - env_var.save().then -> - self.transitionToRoute('env_vars') + if @isValid() + env_var = Travis.EnvVar.create( + name: @get('name') + value: @get('value') + public: @get('public') + repo: @get('repo') + ) + + self = this + env_var.save().then => + @set('isSaving', false) + @reset() + self.transitionToRoute('env_vars') + , => + @set('isSaving', false) + else + @set('isSaving', false) diff --git a/assets/scripts/app/controllers/ssh_key.coffee b/assets/scripts/app/controllers/ssh_key.coffee index 9dbcd473..110cc384 100644 --- a/assets/scripts/app/controllers/ssh_key.coffee +++ b/assets/scripts/app/controllers/ssh_key.coffee @@ -1,9 +1,14 @@ -Travis.SshKeyController = Ember.ObjectController.extend +require 'travis/validations' + +Travis.SshKeyController = Ember.ObjectController.extend Travis.Validations, isEditing: false defaultKey: null - needs: ['repoSettings'] - repo: Ember.computed.alias('controllers.repoSettings.model') + needs: ['repo'] + repo: Ember.computed.alias('controllers.repo.repo') + + validates: + value: ['presence'] actions: add: -> @@ -12,8 +17,12 @@ Travis.SshKeyController = Ember.ObjectController.extend @set('isEditing', true) save: -> - @get('model').save().then => - @set('isEditing', false) + if @isValid() + @get('model').save().then => + @set('isEditing', false) + , (xhr) => + if xhr.status == 422 + @addErrorsFromResponse(JSON.parse(xhr.response)['errors']) delete: -> @get('model').deleteRecord().then => diff --git a/assets/scripts/app/helpers/handlebars.coffee b/assets/scripts/app/helpers/handlebars.coffee index 15146547..dec9ef5b 100644 --- a/assets/scripts/app/helpers/handlebars.coffee +++ b/assets/scripts/app/helpers/handlebars.coffee @@ -59,6 +59,43 @@ Ember.LinkView.reopen _trackEvent: (event) -> event.preventDefault() +FormFieldRowView = Ember.View.extend + invalid: Ember.computed.notEmpty('errors.[]') + classNameBindings: ['invalid'] + classNames: 'field' + +Ember.Handlebars.registerHelper('travis-field', (name, options) -> + errors = @get('errors').for(name) + template = options.fn + delete options.fn + + view = FormFieldRowView.create( + controller: this + template: template + errors: errors + ) + + Ember.Handlebars.helpers.view.call(this, view, options) +) +Travis.ErrorsView = Ember.View.extend + tagName: 'span' + template: Ember.Handlebars.compile("{{#each view.errors}}{{message}}{{/each}}") + classNames: ['error'] + classNameBindings: ['codes'] + codes: (-> + @get('errors').mapBy('code') + ).property('@errors') + +Ember.Handlebars.helper('travis-errors', (name, options) -> + errors = @get('errors').for(name) + view = Travis.ErrorsView.create( + controller: this + errors: errors + ) + + Ember.Handlebars.helpers.view.call(this, view, options) +) + Ember.Handlebars.registerHelper('settings-form', (path, options) -> if arguments.length == 1 options = path diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index 9bd8877d..4c7faf1b 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -366,7 +366,7 @@ Travis.SettingsIndexRoute = Travis.Route.extend Travis.EnvVarsRoute = Travis.Route.extend model: (params) -> repo = @modelFor('repo') - repo.get('envVars') + repo.get('envVars.promise') Travis.SshKeyRoute = Travis.Route.extend model: (params) -> diff --git a/assets/scripts/app/templates/env_vars.hbs b/assets/scripts/app/templates/env_vars.hbs index 84068b52..20cef410 100644 --- a/assets/scripts/app/templates/env_vars.hbs +++ b/assets/scripts/app/templates/env_vars.hbs @@ -1,27 +1,26 @@ -
- Name: {{name}}
- Value: {{value}}
- Edit
- Delete
-