$.fn.markRequired = function(options) { if (!options.required) {return;} var required = options.required; if (options.object_name) { required = $._addObjectName(required, options.object_name); } var $form = $(this); $.each(required, function(i, name) { var field = $form.find('[name="'+name+'"]'); if (!field.length) {return;} field.attr({'aria-required': 'true'}); field.each(function() { if (!this.id) {return;} var label = $('label[for="'+this.id+'"]'); if (!label.length) {return;} // Added the if statement to prevent the JS from adding the asterisk to the forgot password placeholder. if (this.id != 'pseudonym_session_unique_id_forgot') {label.append($('<span aria-hidden="true" />').text('*').attr('title', I18n.t('errors.field_is_required', "This field is required")));} }); }); };
$.fn.fillFormData = function(data, opts) { if(this.length) { data = data || []; var options = $.extend({}, $.fn.fillFormData.defaults, opts); if(options.object_name) { data = $._addObjectName(data, options.object_name, true); } this.find(":input").each(function() { var $obj = $(this); var name = $obj.attr('name'); var inputType = $obj.attr('type'); if(name in data) { if(name) { if(inputType == "hidden" && $obj.next("input:checkbox").attr('name') == name) { // do nothing } else if(inputType != "checkbox" && inputType != "radio") { var val = data[name]; if(typeof(val) == 'undefined' || val === null) { val = ""; } $obj.val(val.toString()); } else { if($obj.val() == data[name]) { $obj.attr('checked', true); } else { $obj.attr('checked', false); } } if($obj && $obj.change && options.call_change) { $obj.change(); } } } }); } return this; };
$.fn.validateForm = function(options) { if (this.length === 0) { return false; } var options = $.extend({}, $.fn.validateForm.defaults, options), $form = this, errors = {}, data = options.data || $form.getFormData(options); if (options.object_name) { options.required = $._addObjectName(options.required, options.object_name); options.date_fields = $._addObjectName(options.date_fields, options.object_name); options.dates = $._addObjectName(options.dates, options.object_name); options.times = $._addObjectName(options.times, options.object_name); options.numbers = $._addObjectName(options.numbers, options.object_name); options.property_validations = $._addObjectName(options.property_validations, options.object_name); } if (options.required) { var required = _.result(options, 'required') $.each(required, function(i, name) { if (!data[name]) { if (!errors[name]) { errors[name] = []; } var fieldPrompt = $form.getFieldLabelString(name); errors[name].push(I18n.t('errors.required', "Required field")+(fieldPrompt ? ': '+fieldPrompt : '')); } }); } if(options.date_fields) { $.each(options.date_fields, function(i, name) { var $item = $form.find("input[name='" + name + "']").filter(".datetime_field_enabled"); if ($item.length && $item.data('invalid')) { if (!errors[name]) { errors[name] = []; } errors[name].push(I18n.t('errors.invalid_datetime', "Invalid date/time value")); } }); } if (options.numbers) { $.each(options.numbers, function(i, name){ var val = parseFloat(data[name]); if(isNaN(val)) { if(!errors[name]) { errors[name] = []; } errors[name].push(I18n.t('errors.invalid_number', "This should be a number.")); } }); } if(options.property_validations) { $.each(options.property_validations, function(name, validation) { if($.isFunction(validation)) { var result = validation.call($form, data[name], data); if(result) { if(typeof(result) != "string") { result = I18n.t('errors.invalid_entry_for_field', "Invalid entry: %{field}", {field: name}); } if(!errors[name]) { errors[name] = []; } errors[name].push(result); } } }); } var hasErrors = false; for(var err in errors) { hasErrors = true; break; } if(hasErrors) { $form.formErrors(errors, options); $.trackEvent("Form Errors", this.attr('id') || this.attr('class') || document.title, JSON.stringify(errors)); return false; } return true; };