Source: themes/ess-dive/views/metadata/EMLPartyView.js

/* global define */
define(['underscore', 'jquery', 'views/metadata/BaseEMLPartyView'],
    function(_, $, BaseEMLPartyView) {

        /*
         The EMLParty renders the content of an EMLParty model
         */
        var EMLPartyView = BaseEMLPartyView.extend({
            /**
             * Override parent validation handling for email address when the person is a contact
             *
             * Validates and displays error messages for the persons' name, email
             *
             * @function showValidation
             */

        	showValidation: function() {

                if (this.model.isValid()) {
                    this.$(".notification").empty();
                    this.$(".error").removeClass("error");
                }
                else{
                    // Clear error marks from fields
                    this.$("[data-attribute='givenName']").removeClass("error");
                    this.$("[data-attribute='surName']").removeClass("error");
                    this.$("[data-attribute='email']").removeClass("error");
                

                    var hasFirstName = this.model.get("individualName") &&
                     this.model.get("individualName").givenName;
                    var hasLastName = this.model.get("individualName") &&
                     this.model.get("individualName").surName;

                    var hasEmail = this.model.get("email") && 
                                    this.model.get("email").length != 0 &&
                                    this.model.get("email") != "";

                    var isContact = this.model.get("type") == "contact";

                    if(hasFirstName) {
                        var firstName = this.model.get("individualName").givenName;
                        if(Array.isArray(firstName) && firstName.length == 0) {
                            hasFirstName = false;
                        }
                    }

                    if(hasEmail) {
                        var email = this.model.get("email");
                        if(Array.isArray(email) && email.length == 0) {
                            hasEmail = false;
                        }
                    }

                    // Check if user has supplied required fields.
                    if(hasFirstName && hasLastName) {
                        if(!isContact){
                            return;
                        } else if(isContact && hasEmail){
                            return;
                        }
                    }


                    if(!hasFirstName) {
                        this.$("[data-attribute='givenName']").addClass("error");
                    }

                    if(!hasLastName) {
                        this.$("[data-attribute='surName']").addClass("error");
                    }

                    // If type is contact, check if there isn't an email address
                    if(isContact && !hasEmail) {
                        this.$("[data-attribute='email']").addClass("error");
                    }
                
                    this.$(".notification").text(this.model.validationError.errorMessage).addClass("error");
                }
            }

        });

        return EMLPartyView;
    }
);