X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=js%2Fkivi.Validator.js;h=4d03451b17bac68af6bbcf38cb3c29c397373c57;hb=40f3befb965dd6125c0da70ad292f41a5d168d1c;hp=af1142559836386270ef0645d4a673b3b012ac50;hpb=67dcea83ce7512a5719b34584fbbdc56ed0825e6;p=kivitendo-erp.git diff --git a/js/kivi.Validator.js b/js/kivi.Validator.js index af1142559..4d03451b1 100644 --- a/js/kivi.Validator.js +++ b/js/kivi.Validator.js @@ -5,11 +5,14 @@ namespace("kivi.Validator", function(ns) { // 'selector'. Elements that should be validated must have an // attribute named "data-validate" which is set to a space-separated // list of tests to perform. Additionally, the attribute - // "data-title" must be set to a human-readable name of the field - // that can be shown as part of an error message. + // "data-title" can be set to a human-readable name of the field + // that can be shown in front of an error message. // // Supported validation tests are: // - "required": the field must be set (its .val() must not be empty) + // - "number": the field must be in number format (its .val() must in the right format) + // - "date": the field must be in date format (its .val() must in the right format) + // - "time": the field must be in time format (its .val() must in the right format) // // The validation will abort and return "false" as soon as // validation routine fails. @@ -30,13 +33,21 @@ namespace("kivi.Validator", function(ns) { }; ns.validate = function($e) { + var $e_annotate; + if ($e.data('ckeditorInstance')) { + $e_annotate = $($e.data('ckeditorInstance').editable().$); + if ($e.data('title')) + $e_annotate.data('title', $e.data('title')); + } var tests = $e.data('validate').split(/ +/); for (var test_idx in tests) { var test = tests[test_idx]; + if (!ns.checks[test]) + continue; if (ns.checks[test]) { - if (!ns.checks[test]($e)) + if (!ns.checks[test]($e, $e_annotate)) return false; } else { var error = "kivi.validate_form: unknown test '" + test + "' for element ID '" + $e.prop('id') + "'"; @@ -50,58 +61,107 @@ namespace("kivi.Validator", function(ns) { } ns.checks = { - required: function($e) { + required: function($e, $e_annotate) { + $e_annotate = $e_annotate || $e; + if ($e.val() === '') { - ns.annotate($e, kivi.t8("This field must not be empty.")); + ns.annotate($e_annotate, kivi.t8("This field must not be empty.")); return false; } else { - ns.annotate($e); + ns.annotate($e_annotate); return true; } }, - number: function($e) { + number: function($e, $e_annotate) { + $e_annotate = $e_annotate || $e; + var number_string = $e.val(); var parsed_number = kivi.parse_amount(number_string); if (parsed_number === null) { $e.val(''); - ns.annotate($e); + ns.annotate($e_annotate); return true; } else if (parsed_number === undefined) { - ns.annotate($e, kivi.t8('Wrong number format (#1)', [ kivi.myconfig.numberformat ])); + ns.annotate($e_annotate, kivi.t8('Wrong number format (#1)', [ kivi.myconfig.numberformat ])); return false; } else { var formatted_number = kivi.format_amount(parsed_number); if (formatted_number != number_string) $e.val(formatted_number); - ns.annotate($e); + ns.annotate($e_annotate); return true; } }, - date: function($e) { + date: function($e, $e_annotate) { + $e_annotate = $e_annotate || $e; + var date_string = $e.val(); var parsed_date = kivi.parse_date(date_string); - if (parsed_number === null) { + if (parsed_date === null) { $e.val(''); - ns.annotate($e); + ns.annotate($e_annotate); return true; } else if (parsed_date === undefined) { - ns.annotate($e, kivi.t8('Wrong date format (#1)', [ kivi.myconfig.dateformat ])); + ns.annotate($e_annotate, kivi.t8('Wrong date format (#1)', [ kivi.myconfig.dateformat ])); return false; } else { var formatted_date = kivi.format_date(parsed_date); if (formatted_date != date_string) $e.val(formatted_date); - ns.annotate($e); + ns.annotate($e_annotate); return true; } + }, + time: function($e, $e_annotate) { + $e_annotate = $e_annotate || $e; + + var time_string = $e.val(); + + var parsed_time = kivi.parse_time(time_string); + if (parsed_time === null) { + $e.val(''); + ns.annotate($e_annotate); + return true; + } else + if (parsed_time === undefined) { + ns.annotate($e_annotate, kivi.t8('Wrong time format (#1)', [ kivi.myconfig.timeformat ])); + return false; + } else + { + var formatted_time = kivi.format_time(parsed_time); + if (formatted_time != time_string) + $e.val(formatted_time); + ns.annotate($e_annotate); + return true; + } + }, + trimmed_whitespaces: function($e, $e_annotate) { + $e_annotate = $e_annotate || $e; + + var string = $e.val(); + + if ($e.hasClass('tooltipstered')) + $e.tooltipster('destroy'); + + if (string.match(/^\s|\s$/)) { + $e.val(string.trim()); + + $e.tooltipster({ + content: kivi.t8("Leading and trailing whitespaces have been removed."), + contentAsHTML: true, + theme: 'tooltipster-light', + }); + $e.tooltipster('show'); + } + return true; } }; @@ -111,6 +171,9 @@ namespace("kivi.Validator", function(ns) { if ($e.hasClass('tooltipstered')) $e.tooltipster('destroy'); + if ($e.data('title')) + error = $e.data('title') + ': ' + error; + $e.tooltipster({ content: error, theme: 'tooltipster-light',