From 2d9416d916ecee660e82c357519f7ea5e2d7df96 Mon Sep 17 00:00:00 2001 From: Andreas Fernandez <a.fernandez@scripting-base.de> Date: Wed, 30 Mar 2016 15:12:08 +0200 Subject: [PATCH] [TASK] Optimize FormEngineValidation, Part II Some functions inside FormEngineValidation are optimized to reduce runtime or run multiple validations on fields that are already marked as "failed". Resolves: #81053 Releases: master Change-Id: I751d5e99df2b58c14f629c84b305ec49bcc0d411 Reviewed-on: https://review.typo3.org/48192 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Frank Naegler <frank.naegler@typo3.org> Tested-by: Frank Naegler <frank.naegler@typo3.org> Reviewed-by: Jan Helke <typo3@helke.de> Tested-by: Jan Helke <typo3@helke.de> --- .../Public/JavaScript/FormEngineValidation.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js index 628fe04c258c..999cee0a9515 100644 --- a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js +++ b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js @@ -148,7 +148,7 @@ define(['jquery', 'moment'], function ($, moment) { theString = date.format('DD-MM-YYYY'); } } else { - parsedInt = parseInt(value); + parsedInt = value * 1; if (!parsedInt) { return ''; } @@ -250,6 +250,10 @@ define(['jquery', 'moment'], function ($, moment) { } $.each(rules, function(k, rule) { + if (markParent) { + // abort any further validation as validating the field already failed + return false; + } switch (rule.type) { case 'required': if (value === '') { @@ -413,12 +417,10 @@ define(['jquery', 'moment'], function ($, moment) { case 'is_in': if (config.is_in) { theValue = '' + value; - for (a = 0; a < theValue.length; a++) { - var theChar = theValue.substr(a, 1); - if (config.is_in.indexOf(theChar) != -1) { - newString += theChar; - } - } + // Escape special characters, see https://stackoverflow.com/a/6969486/4828813 + config.is_in = config.is_in.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + var re = new RegExp('[^' + config.is_in + ']+', 'g'); + newString = theValue.replace(re, ''); } else { newString = theValue; } @@ -604,6 +606,7 @@ define(['jquery', 'moment'], function ($, moment) { }; /** + * Trims leading whitespace characters * * @param {String} value * @returns {String} @@ -617,6 +620,7 @@ define(['jquery', 'moment'], function ($, moment) { }; /** + * Trims trailing whitespace characters * * @param {String} value * @returns {String} -- GitLab