From 4cc35cdc3c6ffc31439f672c47e1d5587e69536e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bernd=20Ble=C3=9Fmann?= Date: Thu, 6 May 2021 15:06:50 +0200 Subject: [PATCH] =?utf8?q?js-Validator:=20Workaround,=20um=20Meldung=20f?= =?utf8?q?=C3=BCr=20ckeditor=20am=20richtigen=20Platz=20anzuzeigen?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- js/kivi.Validator.js | 46 +++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) 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; } } -- 2.20.1