Source: party/editAccount.js

/**
 * Change a party's password
 * @module
 */

'use strict';

app.directive('partyEditAccountForm', [
  'messageService', 'constantService',
  function (messages, constants) {
    var link = function ($scope) {
      var party = $scope.party;
      var form = $scope.partyEditAccountForm;

      function init() {
        form.data = {
          email: party.email,
        };
      }
      init();

      $scope.$watch('partyEditAccountForm.data.password.again', function () {
        form['password.again'].$setValidity('match', !form.data.password || form.data.password.once === form.data.password.again);
      });

      form.save = function () {
        if (form.data.password && !(form.data.password.once || form.data.password.again))
          delete form.data.password;
        form.$setSubmitted();
        messages.clear(form);
        party.saveAccount(form.data).then(
          function () {
            form.validator.server({});

            messages.add({
              type: 'green',
              body: constants.message('party.edit.profile.success'),
              owner: form
            });

            init();
            form.$setPristine();
          }, function (res) {
            form.$setUnsubmitted();
            form.validator.server(res);
          });
      };

      var validate = {};
      ['email', 'password', 'password.again', 'auth'].forEach(function (f) {
        validate[f] = {
          tips: constants.message('party.edit.' + f + '.help')
        };
      });
      validate.email.errors = constants.message('login.email.error');
      validate['password.again'].errors = constants.message('party.edit.password.again.error');
      form.validator.client(validate, true);
    };

    return {
      restrict: 'E',
      templateUrl: 'party/editAccount.html',
      link: link
    };
  }
]);