define([ 'backbone', 'backbone.validation', 'underscore', 'gettext' ], function(Backbone, BackboneValidation, _, gettext) { 'use strict'; var errorClass = 'has-error', messageEl = '.field-message', messageContent = '.field-message-content'; // These are the same messages provided by Backbone.Validation, // marked for translation. // See: http://thedersen.com/projects/backbone-validation/#overriding-the-default-error-messages. _.extend(Backbone.Validation.messages, { required: gettext('{0} is required'), acceptance: gettext('{0} must be accepted'), min: gettext('{0} must be greater than or equal to {1}'), max: gettext('{0} must be less than or equal to {1}'), range: gettext('{0} must be between {1} and {2}'), length: gettext('{0} must be {1} characters'), minLength: gettext('{0} must be at least {1} characters'), maxLength: gettext('{0} must be at most {1} characters'), rangeLength: gettext('{0} must be between {1} and {2} characters'), oneOf: gettext('{0} must be one of: {1}'), equalTo: gettext('{0} must be the same as {1}'), digits: gettext('{0} must only contain digits'), number: gettext('{0} must be a number'), email: gettext('{0} must be a valid email'), url: gettext('{0} must be a valid url'), inlinePattern: gettext('{0} is invalid') }); _.extend(Backbone.Validation.callbacks, { // Gets called when a previously invalid field in the // view becomes valid. Removes any error message. valid: function(view, attr, selector) { var $input = view.$('[' + selector + '~="' + attr + '"]'), $message = $input.siblings(messageEl); $input.removeClass(errorClass) .removeAttr('data-error'); $message.removeClass(errorClass) .find(messageContent) .text(''); }, // Gets called when a field in the view becomes invalid. // Adds a error message. invalid: function(view, attr, error, selector) { var $input = view.$('[' + selector + '~="' + attr + '"]'), $message = $input.siblings(messageEl); $input.addClass(errorClass) .attr('data-error', error); $message.addClass(errorClass) .find(messageContent) .text($input.data('error')); } }); Backbone.Validation.configure({ labelFormatter: 'label' }); } );