/** * Form validation configuration file. * * See jQuery validation plugin documentation for more information. */ define([ "regex", "jquery", "jquery.validate", ], function(regex){ /****************************************************/ /*********** Custom validation methods *************/ /****************************************************/ //don't ignore hidden select (for "select2 plugin" selects validation) $.validator.setDefaults({ ignore: "null" }); //custom validation rules $.validator.addMethod("tag", function(value, element) { return /^[\w,]+$/.test(value); }, "Only alphanum., '_' and ',' char." ); $.validator.addMethod("reviewer", function (value, element) { return /^[A-Za-z\u00C0-\u017F '-].*$/.test(value); }, "Only alpha., ''', '-' and ' ' char." ); //avoid parsing errors with the RegExps used in setDesc $.validator.addMethod("noChangelogTag", function(value, element) { return ! regex.changelog_tag.test(value); }, "No changelog tag (for parsing)." ); //avoid parsing errors with the RegExps used in setDesc $.validator.addMethod("noReviewerTag", function(value, element) { return ! regex.reviewer_tag.test(value); }, "No reviewer tag (for parsing)." ); //avoid parsing errors with the RegExps used in setDesc $.validator.addMethod("noValidatorTag", function(value, element) { return ! regex.validator_tag.test(value); }, "No validator tag." ); $.validator.addMethod("noCarriageReturn", function(value, element) { return ! /\n/.test(value); }, "No carriage return." ); $.validator.addMethod("noJiraIDMentioned", function(value, element) { var textOfDescription = $("#description_field").val(); var pattern = /(JD20\d\d-\d+)/i; var jiraidPresent = pattern.test(textOfDescription); if($("#closeJira").is(':checked')){ if(!jiraidPresent) { return false; } } return true; }, "Please Enter JIRA ID to be closed." ); $.validator.addMethod("noDefaultDescription", function (value, element) { return value != ""; }, "Please type a description." ); /****************************************************/ /****************** Form options *******************/ /****************************************************/ var code_description = { errorElement: 'span', rules: { scope_tag: { required: true, tag: true, noChangelogTag: true, //useless because of tag rule noReviewerTag: true, //useless because of tag rule noValidatorTag: true, //useless because of tag rule }, type_tag: { required: true, }, reviewer_field: { noChangelogTag: true, noReviewerTag: true, noValidatorTag: true, reviewer: true, }, description_field: { required: { depends: function(element) { return ($.trim($("#changelog_field").val()) == ""); } }, minlength: 5, noChangelogTag: true, noReviewerTag: true, noValidatorTag: true, noDefaultDescription: true }, changelog_field: { required: { depends: function(element) { return ($.trim($("#description_field").val()) == ""); } }, minlength: 5, noChangelogTag: true, noReviewerTag: true, noValidatorTag: true, noCarriageReturn: true, }, closeJira: { noJiraIDMentioned : true, }, }, messages: { description_field: { required: "This field or 'Changelog' is required." }, changelog_field: { required: "This field or 'Description' is required." }, }, highlight: function(element, errorClass) { $(element).parent().parent().addClass(errorClass) }, unhighlight: function(element, errorClass, validClass) { $(element).parent().parent().removeClass(errorClass) }, errorPlacement: function(error, element) { element.parent().siblings().eq(0).append(error); }, onfocusout: false, onkeyup: false, onclick: false, onsubmit: false, }; var data_description = { errorElement: 'span', rules: { domain_tag: { required: true }, description_field: { required: true, minlength: 5, noValidatorTag: true, noDefaultDescription: true } }, highlight: function(element, errorClass) { $(element).parent().parent().addClass(errorClass) }, unhighlight: function(element, errorClass, validClass) { $(element).parent().parent().removeClass(errorClass) }, errorPlacement: function(error, element) { element.parent().siblings().eq(0).append(error); }, onfocusout: false, onkeyup: false, onclick: false, onsubmit: false, }; var validation_process = { rules: { login: { required: true }, password: { required: true }, }, highlight: function(element, errorClass) { $(element).parent().parent().addClass(errorClass) }, unhighlight: function(element, errorClass, validClass) { $(element).parent().parent().removeClass(errorClass) }, errorPlacement: function(error, element) { //do nothing... }, }; return { code_description: code_description, data_description: data_description, validation_process: validation_process, } } );