71 lines
2.8 KiB
JavaScript
71 lines
2.8 KiB
JavaScript
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'
|
|
});
|
|
}
|
|
);
|