115 lines
2.7 KiB
JavaScript
115 lines
2.7 KiB
JavaScript
/*!
|
|
* jQuery Validate Unobtrusive Bootstrap 1.2.3
|
|
*
|
|
* https://github.com/sandrocaseiro/jquery.validate.unobtrusive.bootstrap
|
|
*
|
|
* Copyright 2014 Sandro Caseiro
|
|
* Released under the MIT license:
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
*/
|
|
|
|
(function($)
|
|
{
|
|
function escapeAttributeValue(value)
|
|
{
|
|
// As mentioned on http://api.jquery.com/category/selectors/
|
|
return value.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1");
|
|
}
|
|
|
|
function addErrorClass(element)
|
|
{
|
|
var group = element.closest('.form-group');
|
|
if (group && group.length > 0)
|
|
{
|
|
group.addClass('has-error').removeClass('has-success');
|
|
}
|
|
}
|
|
|
|
function addSuccessClass(element)
|
|
{
|
|
var group = element.closest('.form-group');
|
|
if (group && group.length > 0)
|
|
{
|
|
group.addClass('has-success').removeClass('has-error');
|
|
}
|
|
}
|
|
|
|
function onError(formElement, errorPlacementBase, error, inputElement)
|
|
{
|
|
errorPlacementBase(error, inputElement);
|
|
|
|
if ($(inputElement).hasClass('input-validation-error'))
|
|
{
|
|
addErrorClass(inputElement)
|
|
}
|
|
}
|
|
|
|
function onSuccess(successBase, error)
|
|
{
|
|
var container = error.data("unobtrusiveContainer");
|
|
|
|
successBase(error);
|
|
|
|
if (container)
|
|
{
|
|
addSuccessClass(container);
|
|
}
|
|
}
|
|
|
|
$.fn.validateBootstrap = function(refresh)
|
|
{
|
|
return this.each(function()
|
|
{
|
|
var $this = $(this);
|
|
if (refresh)
|
|
{
|
|
$this.removeData('validator');
|
|
$this.removeData('unobtrusiveValidation');
|
|
$.validator.unobtrusive.parse($this);
|
|
}
|
|
|
|
var validator = $this.data('validator');
|
|
|
|
if (validator)
|
|
{
|
|
validator.settings.errorClass += ' text-danger';
|
|
var errorPlacementBase = validator.settings.errorPlacement;
|
|
var successBase = validator.settings.success;
|
|
|
|
validator.settings.errorPlacement = function(error, inputElement)
|
|
{
|
|
onError($this, errorPlacementBase, error, inputElement);
|
|
};
|
|
|
|
validator.settings.success = function(error)
|
|
{
|
|
onSuccess(successBase, error);
|
|
}
|
|
|
|
$this.find('.input-validation-error').each(function()
|
|
{
|
|
var errorElement = $this.find("[data-valmsg-for='" + escapeAttributeValue($(this)[0].name) + "']");
|
|
var newElement = $(document.createElement(validator.settings.errorElement))
|
|
.addClass('text-danger')
|
|
.attr('for', escapeAttributeValue($(this)[0].name))
|
|
.text(errorElement.text());
|
|
onError($this, errorPlacementBase, newElement, $(this));
|
|
});
|
|
}
|
|
// if validation isn't enabled, but the form has the validation error message element, add error class to container
|
|
else
|
|
{
|
|
$this.find('.input-validation-error').each(function()
|
|
{
|
|
addErrorClass($(this));
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
$(function()
|
|
{
|
|
$('form').validateBootstrap();
|
|
});
|
|
|
|
}(jQuery)); |