/**
* Walidacja dla systemu obsługi formularzy Fasic_Form.
* Sposób wykorzystania:
*
* $('form').fasicForm({
* callbackBefore: function($form) {
* // wyczyść poprzednie informacje o błędach
* },
* callback: function(field, message) {
* // pokaż informacje o błędzie 'message' dla pola 'field'
* return true; // zwróć false jeżeli chcesz pobrać tylko pierwszy błąd
* },
* callbackAfter: function($form, isValid) {
* if(! isValid && sprawdz_poprawnosc_wg_uznania()) return false; // formularz nie jest poprawny
* return true; // formularz jest poprawny - wyslij go
* }
* });
*
* @version 1.0
* @copyright webprogramming.pl
* @author Szymon Szczepaniak
*/
jQuery.fn.extend({
/**
* Inicjowanie walidacji dla formularza.
*
* Domyślnie reguły walidacji są pobierane z elementu o klasie fasicValidation znajdującym się wewnątrz formularza.
*
*/
fasicForm: function(setts) {
// domyślne wartości
setts = $.extend({}, {
validationElement: '.fasicValidation',
callback: function() {},
callbackBefore: function() {},
callbackAfter: function($form, isValid) {return isValid;}
}, setts);
// dla wszystkich obiektów
return $(this).each(function() {
var $this = $(this);
// obiekt nie jest formularzem
if(! $this.is('form')) {
return;
}
// pobierz reguły walidacji dla formularza
var rules = false;
try {
rules = $(setts.validationElement, $this).html();
eval('rules = ' + rules);
} catch (e) { }
// zainicjuj walidacje formularza
if(typeof rules == 'object') {
// gdy formularz jest wysyłany
$this.submit(function() {
var checkers = $(this).fasicFormRules;
var checkNext = true;
var isError = false;
// uruchom callback - walidacja się zaczyna
setts.callbackBefore($(this));
$.each(rules, function(field, validators) {
var value = $('[@name=' + field + ']').val();
// dla każdego walidatora dla pola
$.each(validators, function() {
// sprawdź poprawność danych
if(! checkers[this.name](value)) {
isError = true;
// zgłoś wystąpienie błędu oraz pozwól na zakończenie dalszego sprawdzania
if(! setts.callback(field, this.error)) {
checkNext = false;
}
}
return checkNext;
});
return checkNext;
});
// jeżeli wystąpił błąd nie wysyłaj formularza
return setts.callbackAfter($(this), !isError);
});
}
})
},
/**
* Dostępne walidatory.
* Nazwa metody odpowiada końcówce nazwy klasy PHP, na przykład:
* Fasic_Form_Validator_Email -> email
*
* Po dodaniu walidatora po stronie serwera musimy dodać
* odpowiednią metodę do tej klasy.
*/
fasicFormRules: {
/**
*/
required: function(value) {
return (value != undefined) && (value != '');
},
/**
*/
email: function(value) {
var regex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return (value == '') || regex.test(value);
}
}
});