1 namespace("kivi.Validator", function(ns) {
4 // Performs various validation steps on the descendants of
5 // 'selector'. Elements that should be validated must have an
6 // attribute named "data-validate" which is set to a space-separated
7 // list of tests to perform. Additionally, the attribute
8 // "data-title" must be set to a human-readable name of the field
9 // that can be shown as part of an error message.
11 // Supported validation tests are:
12 // - "required": the field must be set (its .val() must not be empty)
14 // The validation will abort and return "false" as soon as
15 // validation routine fails.
17 // The function returns "true" if all validations succeed for all
19 ns.validate_all = function(selector) {
20 selector = selector || '#form';
21 var to_check = $(selector + ' [data-validate]').toArray();
23 for (var to_check_idx in to_check)
24 if (!ns.validate($(to_check[to_check_idx]))) {
25 $(to_check[to_check_idx]).focus();
32 ns.validate = function($e) {
33 var tests = $e.data('validate').split(/ +/);
35 for (var test_idx in tests) {
36 var test = tests[test_idx];
38 if (ns.checks[test]) {
39 if (!ns.checks[test]($e))
42 var error = "kivi.validate_form: unknown test '" + test + "' for element ID '" + $e.prop('id') + "'";
53 required: function($e) {
54 if ($e.val() === '') {
55 ns.annotate($e, kivi.t8("This field must not be empty."));
62 number: function($e) {
63 var number_string = $e.val();
65 var parsed_number = kivi.parse_amount(number_string);
67 if (parsed_number === null) {
72 if (parsed_number === undefined) {
73 ns.annotate($e, kivi.t8('Wrong number format (#1)', [ kivi.myconfig.numberformat ]));
77 var formatted_number = kivi.format_amount(parsed_number);
78 if (formatted_number != number_string)
79 $e.val(formatted_number);
85 var date_string = $e.val();
87 var parsed_date = kivi.parse_date(date_string);
89 if (parsed_number === null) {
94 if (parsed_date === undefined) {
95 ns.annotate($e, kivi.t8('Wrong date format (#1)', [ kivi.myconfig.dateformat ]));
99 var formatted_date = kivi.format_date(parsed_date);
100 if (formatted_date != date_string)
101 $e.val(formatted_date);
108 ns.annotate = function($e, error) {
110 $e.addClass('kivi-validator-invalid');
111 if ($e.hasClass('tooltipstered'))
112 $e.tooltipster('destroy');
116 theme: 'tooltipster-light',
118 $e.tooltipster('show');
120 $e.removeClass('kivi-validator-invalid');
121 if ($e.hasClass('tooltipstered'))
122 $e.tooltipster('destroy');
126 ns.reinit_widgets = function() {
127 kivi.run_once_for('[data-validate]', 'data-validate', function(elt) {
128 $(elt).change(function(event){ ns.validate($(elt), event) });
132 ns.init = ns.reinit_widgets;