Skip to content

Commit 2f69cec

Browse files
committed
Merge remote-tracking branch 'origin/AC-10826' into spartans_pr_12062024
2 parents a4fbf70 + caf8240 commit 2f69cec

File tree

1 file changed

+74
-13
lines changed

1 file changed

+74
-13
lines changed

lib/web/jquery/jquery.validate.js

Lines changed: 74 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
// Check if a validator for this form was already created
3333
var validator = $.data( this[ 0 ], "validator" );
34+
3435
if ( validator ) {
3536
return validator;
3637
}
@@ -235,6 +236,7 @@
235236
// https://jqueryvalidation.org/filled-selector/
236237
filled: function( a ) {
237238
var val = $( a ).val();
239+
238240
return val !== null && !!trim( "" + val );
239241
},
240242

@@ -256,6 +258,7 @@
256258
if ( arguments.length === 1 ) {
257259
return function() {
258260
var args = $.makeArray( arguments );
261+
259262
args.unshift( source );
260263
return $.validator.format.apply( this, args );
261264
};
@@ -404,8 +407,9 @@
404407
this.reset();
405408

406409
var currentForm = this.currentForm,
407-
groups = ( this.groups = {} ),
410+
groups = this.groups = {},
408411
rules;
412+
409413
$.each( this.settings.groups, function( key, value ) {
410414
if ( typeof value === "string" ) {
411415
value = value.split( /\s/ );
@@ -420,7 +424,8 @@
420424
} );
421425

422426
function delegate( event ) {
423-
var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined" && $( this ).attr( "contenteditable" ) !== "false";
427+
var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined"
428+
&& $( this ).attr( "contenteditable" ) !== "false";
424429

425430
// Set form expando on contenteditable
426431
if ( !this.form && isContentEditable ) {
@@ -437,16 +442,20 @@
437442
var validator = $.data( this.form, "validator" ),
438443
eventType = "on" + event.type.replace( /^validate/, "" ),
439444
settings = validator.settings;
445+
440446
if ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {
441447
settings[ eventType ].call( validator, this, event );
442448
}
443449
}
444450

445451
$( this.currentForm )
446452
.on( "focusin.validate focusout.validate keyup.validate",
447-
":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], " +
448-
"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], " +
449-
"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], " +
453+
":text, [type='password'], [type='file'], " +
454+
"select, textarea, [type='number'], [type='search'], " +
455+
"[type='tel'], [type='url'], [type='email'], " +
456+
"[type='datetime'], [type='date'], [type='month'], " +
457+
"[type='week'], [type='time'], [type='datetime-local'], " +
458+
"[type='range'], [type='color'], " +
450459
"[type='radio'], [type='checkbox'], [contenteditable], [type='button']", delegate )
451460

452461
// Support: Chrome, oldIE
@@ -471,9 +480,45 @@
471480
},
472481

473482
checkForm: function() {
483+
if ($(this.currentForm).find('.bundle').length > 0
484+
&& $(this.currentForm).find('input[type="checkbox"]').length > 0) {
485+
return this.checkBundleForm();
486+
}
487+
return this.checkDefaultForm();
488+
},
489+
490+
checkBundleForm: function() {
491+
var optionNumber, elements, optionMap, el, option;
492+
493+
this.prepareForm();
494+
elements = this.elements();
495+
optionMap = {};
496+
for (var i = 0; i < elements.length; i++) {
497+
el = elements[i];
498+
optionNumber = el.id.split('-')[2];
499+
if (!optionMap[optionNumber]) {
500+
optionMap[optionNumber] = [];
501+
}
502+
optionMap[optionNumber].push(el);
503+
}
504+
for (option in optionMap) {
505+
if (optionMap.hasOwnProperty(option)) {
506+
this.processOptionGroup(optionMap[option]);
507+
}
508+
}
509+
return this.valid();
510+
},
511+
512+
processOptionGroup: function(group) {
513+
if (group.length > 0) {
514+
this.check(group[0]);
515+
}
516+
},
517+
518+
checkDefaultForm: function() {
474519
this.prepareForm();
475-
for ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {
476-
this.check( elements[ i ] );
520+
for (var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++) {
521+
this.check(elements[i]);
477522
}
478523
return this.valid();
479524
},
@@ -595,6 +640,7 @@
595640
/* jshint unused: false */
596641
var count = 0,
597642
i;
643+
598644
for ( i in obj ) {
599645

600646
// This check allows counting elements with empty error
@@ -641,6 +687,7 @@
641687

642688
findLastActive: function() {
643689
var lastActive = this.lastActive;
690+
644691
return lastActive && $.grep( this.errorList, function( n ) {
645692
return n.element.name === lastActive.name;
646693
} ).length === 1 && lastActive;
@@ -657,7 +704,9 @@
657704
.not( this.settings.ignore )
658705
.filter( function() {
659706
var name = this.name || $( this ).attr( "name" ); // For contenteditable
660-
var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined" && $( this ).attr( "contenteditable" ) !== "false";
707+
708+
var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined"
709+
&& $( this ).attr( "contenteditable" ) !== "false";
661710

662711
if ( !name && validator.settings.debug && window.console ) {
663712
console.error( "%o has no name assigned", this );
@@ -690,6 +739,7 @@
690739

691740
errors: function() {
692741
var errorClass = this.settings.errorClass.split( " " ).join( "." );
742+
693743
return $( this.settings.errorElement + "." + errorClass, this.errorContext );
694744
},
695745

@@ -846,6 +896,7 @@
846896
// Return the custom message for the given element name and validation method
847897
customMessage: function( name, method ) {
848898
var m = this.settings.messages[ name ];
899+
849900
return m && ( m.constructor === String ? m : m[ method ] );
850901
},
851902

@@ -914,6 +965,7 @@
914965

915966
defaultShowErrors: function() {
916967
var i, elements, error;
968+
917969
for ( i = 0; this.errorList[ i ]; i++ ) {
918970
error = this.errorList[ i ];
919971
if ( this.settings.highlight ) {
@@ -1111,6 +1163,7 @@
11111163

11121164
optional: function( element ) {
11131165
var val = this.elementValue( element );
1166+
11141167
return !$.validator.methods.required.call( this, val, element ) && "dependency-mismatch";
11151168
},
11161169

@@ -1282,11 +1335,11 @@
12821335
}
12831336

12841337
var meta = $.data(element.form, 'validator').settings.meta;
1338+
12851339
return meta ?
12861340
$(element).metadata()[meta] :
12871341
$(element).metadata();
12881342
},
1289-
12901343
dataRules: function( element ) {
12911344
var rules = {},
12921345
$element = $( element ),
@@ -1328,6 +1381,7 @@
13281381
}
13291382
if ( val.param || val.depends ) {
13301383
var keepRule = true;
1384+
13311385
switch ( typeof val.depends ) {
13321386
case "string":
13331387
keepRule = !!$( val.depends, element.form ).length;
@@ -1339,7 +1393,7 @@
13391393
if ( keepRule ) {
13401394
rules[ prop ] = val.param !== undefined ? val.param : true;
13411395
} else {
1342-
$.data( element.form, "validator" ).resetElements( $( element ) );
1396+
$.data(element.form, "validator").resetElements($(element));
13431397
delete rules[ prop ];
13441398
}
13451399
}
@@ -1358,6 +1412,7 @@
13581412
} );
13591413
$.each( [ "rangelength", "range" ], function() {
13601414
var parts;
1415+
13611416
if ( rules[ this ] ) {
13621417
if ( Array.isArray( rules[ this ] ) ) {
13631418
rules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];
@@ -1390,6 +1445,7 @@
13901445
normalizeRule: function( data ) {
13911446
if ( typeof data === "string" ) {
13921447
var transformed = {};
1448+
13931449
$.each( data.split( /\s/ ), function() {
13941450
transformed[ this ] = true;
13951451
} );
@@ -1421,6 +1477,7 @@
14211477

14221478
// Could be an array for select-multiple or a string, both are fine this way
14231479
var val = $( element ).val();
1480+
14241481
return val && val.length > 0;
14251482
}
14261483
if ( this.checkable( element ) ) {
@@ -1489,18 +1546,21 @@
14891546
// https://jqueryvalidation.org/minlength-method/
14901547
minlength: function( value, element, param ) {
14911548
var length = Array.isArray( value ) ? value.length : this.getLength( value, element );
1549+
14921550
return this.optional( element ) || length >= param;
14931551
},
14941552

14951553
// https://jqueryvalidation.org/maxlength-method/
14961554
maxlength: function( value, element, param ) {
14971555
var length = Array.isArray( value ) ? value.length : this.getLength( value, element );
1556+
14981557
return this.optional( element ) || length <= param;
14991558
},
15001559

15011560
// https://jqueryvalidation.org/rangelength-method/
15021561
rangelength: function( value, element, param ) {
15031562
var length = Array.isArray( value ) ? value.length : this.getLength( value, element );
1563+
15041564
return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );
15051565
},
15061566

@@ -1535,11 +1595,11 @@
15351595
// Number of digits right of decimal point.
15361596
return match[ 1 ] ? match[ 1 ].length : 0;
15371597
},
1598+
decimals = 0,
15381599
toInt = function( num ) {
15391600
return Math.round( num * Math.pow( 10, decimals ) );
15401601
},
1541-
valid = true,
1542-
decimals;
1602+
valid = true;
15431603

15441604
// Works only for text, number and range input types
15451605
// TODO find a way to support input types date, datetime, datetime-local, month, time and week
@@ -1562,6 +1622,7 @@
15621622

15631623
// Bind to the blur event of the target in order to revalidate whenever the target field is updated
15641624
var target = $( param );
1625+
15651626
if ( this.settings.onfocusout && target.not( ".validate-equalTo-blur" ).length ) {
15661627
target.addClass( "validate-equalTo-blur" ).on( "blur.validate-equalTo", function() {
15671628
$( element ).valid();
@@ -1605,7 +1666,7 @@
16051666
data: data,
16061667
context: validator.currentForm,
16071668
success: function( response ) {
1608-
var valid = response === true || response === "true",
1669+
var valid = response === true || response === 'true',
16091670
errors, message, submitted;
16101671

16111672
validator.settings.messages[ element.name ][ method ] = previous.originalMessage;

0 commit comments

Comments
 (0)