From: Bernd Bleßmann Date: Thu, 6 May 2021 13:06:50 +0000 (+0200) Subject: js-Validator: Workaround, um Meldung für ckeditor am richtigen Platz anzuzeigen X-Git-Tag: kivitendo-mebil_0.1-0~9^2~259 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=4cc35cdc3c6ffc31439f672c47e1d5587e69536e;p=kivitendo-erp.git js-Validator: Workaround, um Meldung für ckeditor am richtigen Platz anzuzeigen Da das eigentliche Element, bei dem man im HTMl-Template data-validate setzt, beim ckeditor nicht sichtbar ist, erschien der Tooltiop irgendwo anders. Gerne hätte ich in kivi.js (init_text_editor) die data-Attribute "validate" und "title" auf das "editable" vom ckeditor verschoben und kivi.Validate so gelassen. Aber das "editable" ist ein div-Element und die Funktion val() enthält nicht den Text im Editor, weshalb dann die Prüfung nicht funktioniert. Deshalb wird nun in kivi.Validate bei einem ckeditor das Element, bei dem die Annotation erfolgt, auf das "editable" gesetzt. --- diff --git a/js/kivi.Validator.js b/js/kivi.Validator.js index 7cbd7eb6c..b564ffb78 100644 --- a/js/kivi.Validator.js +++ b/js/kivi.Validator.js @@ -33,6 +33,12 @@ 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) { @@ -41,7 +47,7 @@ namespace("kivi.Validator", function(ns) { 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') + "'"; @@ -55,77 +61,85 @@ 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_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) { + 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); + ns.annotate($e_annotate); return true; } else if (parsed_time === undefined) { - ns.annotate($e, kivi.t8('Wrong time format (#1)', [ kivi.myconfig.timeformat ])); + 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); + ns.annotate($e_annotate); return true; } }