|
31 | 31 |
|
32 | 32 | // Check if a validator for this form was already created
|
33 | 33 | var validator = $.data( this[ 0 ], "validator" );
|
34 |
| - |
35 | 34 | if ( validator ) {
|
36 | 35 | return validator;
|
37 | 36 | }
|
|
236 | 235 | // https://jqueryvalidation.org/filled-selector/
|
237 | 236 | filled: function( a ) {
|
238 | 237 | var val = $( a ).val();
|
239 |
| - |
240 | 238 | return val !== null && !!trim( "" + val );
|
241 | 239 | },
|
242 | 240 |
|
|
258 | 256 | if ( arguments.length === 1 ) {
|
259 | 257 | return function() {
|
260 | 258 | var args = $.makeArray( arguments );
|
261 |
| - |
262 | 259 | args.unshift( source );
|
263 | 260 | return $.validator.format.apply( this, args );
|
264 | 261 | };
|
|
407 | 404 | this.reset();
|
408 | 405 |
|
409 | 406 | var currentForm = this.currentForm,
|
410 |
| - groups = this.groups = {}, |
| 407 | + groups = ( this.groups = {} ), |
411 | 408 | rules;
|
412 |
| - |
413 | 409 | $.each( this.settings.groups, function( key, value ) {
|
414 | 410 | if ( typeof value === "string" ) {
|
415 | 411 | value = value.split( /\s/ );
|
|
424 | 420 | } );
|
425 | 421 |
|
426 | 422 | function delegate( event ) {
|
427 |
| - var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined" |
428 |
| - && $( this ).attr( "contenteditable" ) !== "false"; |
| 423 | + var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined" && $( this ).attr( "contenteditable" ) !== "false"; |
429 | 424 |
|
430 | 425 | // Set form expando on contenteditable
|
431 | 426 | if ( !this.form && isContentEditable ) {
|
|
442 | 437 | var validator = $.data( this.form, "validator" ),
|
443 | 438 | eventType = "on" + event.type.replace( /^validate/, "" ),
|
444 | 439 | settings = validator.settings;
|
445 |
| - |
446 | 440 | if ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {
|
447 | 441 | settings[ eventType ].call( validator, this, event );
|
448 | 442 | }
|
449 | 443 | }
|
450 | 444 |
|
451 | 445 | $( this.currentForm )
|
452 | 446 | .on( "focusin.validate focusout.validate keyup.validate",
|
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'], " + |
| 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'], " + |
459 | 450 | "[type='radio'], [type='checkbox'], [contenteditable], [type='button']", delegate )
|
460 | 451 |
|
461 | 452 | // Support: Chrome, oldIE
|
|
480 | 471 | },
|
481 | 472 |
|
482 | 473 | 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() { |
519 | 474 | this.prepareForm();
|
520 |
| - for (var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++) { |
521 |
| - this.check(elements[i]); |
| 475 | + for ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) { |
| 476 | + this.check( elements[ i ] ); |
522 | 477 | }
|
523 | 478 | return this.valid();
|
524 | 479 | },
|
|
640 | 595 | /* jshint unused: false */
|
641 | 596 | var count = 0,
|
642 | 597 | i;
|
643 |
| - |
644 | 598 | for ( i in obj ) {
|
645 | 599 |
|
646 | 600 | // This check allows counting elements with empty error
|
|
687 | 641 |
|
688 | 642 | findLastActive: function() {
|
689 | 643 | var lastActive = this.lastActive;
|
690 |
| - |
691 | 644 | return lastActive && $.grep( this.errorList, function( n ) {
|
692 | 645 | return n.element.name === lastActive.name;
|
693 | 646 | } ).length === 1 && lastActive;
|
|
704 | 657 | .not( this.settings.ignore )
|
705 | 658 | .filter( function() {
|
706 | 659 | var name = this.name || $( this ).attr( "name" ); // For contenteditable
|
707 |
| - |
708 |
| - var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined" |
709 |
| - && $( this ).attr( "contenteditable" ) !== "false"; |
| 660 | + var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined" && $( this ).attr( "contenteditable" ) !== "false"; |
710 | 661 |
|
711 | 662 | if ( !name && validator.settings.debug && window.console ) {
|
712 | 663 | console.error( "%o has no name assigned", this );
|
|
739 | 690 |
|
740 | 691 | errors: function() {
|
741 | 692 | var errorClass = this.settings.errorClass.split( " " ).join( "." );
|
742 |
| - |
743 | 693 | return $( this.settings.errorElement + "." + errorClass, this.errorContext );
|
744 | 694 | },
|
745 | 695 |
|
|
896 | 846 | // Return the custom message for the given element name and validation method
|
897 | 847 | customMessage: function( name, method ) {
|
898 | 848 | var m = this.settings.messages[ name ];
|
899 |
| - |
900 | 849 | return m && ( m.constructor === String ? m : m[ method ] );
|
901 | 850 | },
|
902 | 851 |
|
|
965 | 914 |
|
966 | 915 | defaultShowErrors: function() {
|
967 | 916 | var i, elements, error;
|
968 |
| - |
969 | 917 | for ( i = 0; this.errorList[ i ]; i++ ) {
|
970 | 918 | error = this.errorList[ i ];
|
971 | 919 | if ( this.settings.highlight ) {
|
|
1163 | 1111 |
|
1164 | 1112 | optional: function( element ) {
|
1165 | 1113 | var val = this.elementValue( element );
|
1166 |
| - |
1167 | 1114 | return !$.validator.methods.required.call( this, val, element ) && "dependency-mismatch";
|
1168 | 1115 | },
|
1169 | 1116 |
|
|
1335 | 1282 | }
|
1336 | 1283 |
|
1337 | 1284 | var meta = $.data(element.form, 'validator').settings.meta;
|
1338 |
| - |
1339 | 1285 | return meta ?
|
1340 | 1286 | $(element).metadata()[meta] :
|
1341 | 1287 | $(element).metadata();
|
1342 | 1288 | },
|
| 1289 | + |
1343 | 1290 | dataRules: function( element ) {
|
1344 | 1291 | var rules = {},
|
1345 | 1292 | $element = $( element ),
|
|
1381 | 1328 | }
|
1382 | 1329 | if ( val.param || val.depends ) {
|
1383 | 1330 | var keepRule = true;
|
1384 |
| - |
1385 | 1331 | switch ( typeof val.depends ) {
|
1386 | 1332 | case "string":
|
1387 | 1333 | keepRule = !!$( val.depends, element.form ).length;
|
|
1393 | 1339 | if ( keepRule ) {
|
1394 | 1340 | rules[ prop ] = val.param !== undefined ? val.param : true;
|
1395 | 1341 | } else {
|
1396 |
| - $.data(element.form, "validator").resetElements($(element)); |
| 1342 | + $.data( element.form, "validator" ).resetElements( $( element ) ); |
1397 | 1343 | delete rules[ prop ];
|
1398 | 1344 | }
|
1399 | 1345 | }
|
|
1412 | 1358 | } );
|
1413 | 1359 | $.each( [ "rangelength", "range" ], function() {
|
1414 | 1360 | var parts;
|
1415 |
| - |
1416 | 1361 | if ( rules[ this ] ) {
|
1417 | 1362 | if ( Array.isArray( rules[ this ] ) ) {
|
1418 | 1363 | rules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];
|
|
1445 | 1390 | normalizeRule: function( data ) {
|
1446 | 1391 | if ( typeof data === "string" ) {
|
1447 | 1392 | var transformed = {};
|
1448 |
| - |
1449 | 1393 | $.each( data.split( /\s/ ), function() {
|
1450 | 1394 | transformed[ this ] = true;
|
1451 | 1395 | } );
|
|
1477 | 1421 |
|
1478 | 1422 | // Could be an array for select-multiple or a string, both are fine this way
|
1479 | 1423 | var val = $( element ).val();
|
1480 |
| - |
1481 | 1424 | return val && val.length > 0;
|
1482 | 1425 | }
|
1483 | 1426 | if ( this.checkable( element ) ) {
|
|
1546 | 1489 | // https://jqueryvalidation.org/minlength-method/
|
1547 | 1490 | minlength: function( value, element, param ) {
|
1548 | 1491 | var length = Array.isArray( value ) ? value.length : this.getLength( value, element );
|
1549 |
| - |
1550 | 1492 | return this.optional( element ) || length >= param;
|
1551 | 1493 | },
|
1552 | 1494 |
|
1553 | 1495 | // https://jqueryvalidation.org/maxlength-method/
|
1554 | 1496 | maxlength: function( value, element, param ) {
|
1555 | 1497 | var length = Array.isArray( value ) ? value.length : this.getLength( value, element );
|
1556 |
| - |
1557 | 1498 | return this.optional( element ) || length <= param;
|
1558 | 1499 | },
|
1559 | 1500 |
|
1560 | 1501 | // https://jqueryvalidation.org/rangelength-method/
|
1561 | 1502 | rangelength: function( value, element, param ) {
|
1562 | 1503 | var length = Array.isArray( value ) ? value.length : this.getLength( value, element );
|
1563 |
| - |
1564 | 1504 | return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );
|
1565 | 1505 | },
|
1566 | 1506 |
|
|
1595 | 1535 | // Number of digits right of decimal point.
|
1596 | 1536 | return match[ 1 ] ? match[ 1 ].length : 0;
|
1597 | 1537 | },
|
1598 |
| - decimals = 0, |
1599 | 1538 | toInt = function( num ) {
|
1600 | 1539 | return Math.round( num * Math.pow( 10, decimals ) );
|
1601 | 1540 | },
|
1602 |
| - valid = true; |
| 1541 | + valid = true, |
| 1542 | + decimals; |
1603 | 1543 |
|
1604 | 1544 | // Works only for text, number and range input types
|
1605 | 1545 | // TODO find a way to support input types date, datetime, datetime-local, month, time and week
|
|
1622 | 1562 |
|
1623 | 1563 | // Bind to the blur event of the target in order to revalidate whenever the target field is updated
|
1624 | 1564 | var target = $( param );
|
1625 |
| - |
1626 | 1565 | if ( this.settings.onfocusout && target.not( ".validate-equalTo-blur" ).length ) {
|
1627 | 1566 | target.addClass( "validate-equalTo-blur" ).on( "blur.validate-equalTo", function() {
|
1628 | 1567 | $( element ).valid();
|
|
1666 | 1605 | data: data,
|
1667 | 1606 | context: validator.currentForm,
|
1668 | 1607 | success: function( response ) {
|
1669 |
| - var valid = response === true || response === 'true', |
| 1608 | + var valid = response === true || response === "true", |
1670 | 1609 | errors, message, submitted;
|
1671 | 1610 |
|
1672 | 1611 | validator.settings.messages[ element.name ][ method ] = previous.originalMessage;
|
|
0 commit comments