Skip to content

Commit d548184

Browse files
committed
use-associations-validations
1 parent c7468a6 commit d548184

File tree

4 files changed

+39
-16
lines changed

4 files changed

+39
-16
lines changed

dist/client-side-validations.esm.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,8 @@ $.fn.isValid = function (validators) {
610610
if (obj.is('form')) {
611611
return validateForm(obj, validators);
612612
} else {
613-
return validateElement(obj, validatorsFor(this[0].name, validators));
613+
var form = this.closest('form');
614+
return validateElement(obj, validatorsFor(this[0].name, validators, form));
614615
}
615616
};
616617

@@ -624,8 +625,13 @@ var cleanNestedElementName = function cleanNestedElementName(elementName, nested
624625
return elementName;
625626
};
626627

627-
var cleanElementName = function cleanElementName(elementName, validators) {
628+
var cleanElementName = function cleanElementName(elementName, validators, form) {
628629
elementName = elementName.replace(/\[(\w+_attributes)\]\[[\da-z_]+\](?=\[(?:\w+_attributes)\])/g, '[$1][]');
630+
631+
if (form.data('clientSideValidations').html_settings.type === 'SimpleForm::FormBuilder') {
632+
elementName = elementName.replace(/\]\[\]$/g, ']'); // fix many association collections
633+
}
634+
629635
var nestedMatches = elementName.match(/\[(\w+_attributes)\].*\[(\w+)\]$/);
630636

631637
if (nestedMatches) {
@@ -635,12 +641,12 @@ var cleanElementName = function cleanElementName(elementName, validators) {
635641
return elementName;
636642
};
637643

638-
var validatorsFor = function validatorsFor(elementName, validators) {
644+
var validatorsFor = function validatorsFor(elementName, validators, form) {
639645
if (Object.prototype.hasOwnProperty.call(validators, elementName)) {
640646
return validators[elementName];
641647
}
642648

643-
return validators[cleanElementName(elementName, validators)] || {};
649+
return validators[cleanElementName(elementName, validators, form)] || {};
644650
};
645651

646652
var validateForm = function validateForm(form, validators) {

dist/client-side-validations.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,8 @@
616616
if (obj.is('form')) {
617617
return validateForm(obj, validators);
618618
} else {
619-
return validateElement(obj, validatorsFor(this[0].name, validators));
619+
var form = this.closest('form');
620+
return validateElement(obj, validatorsFor(this[0].name, validators, form));
620621
}
621622
};
622623

@@ -630,8 +631,13 @@
630631
return elementName;
631632
};
632633

633-
var cleanElementName = function cleanElementName(elementName, validators) {
634+
var cleanElementName = function cleanElementName(elementName, validators, form) {
634635
elementName = elementName.replace(/\[(\w+_attributes)\]\[[\da-z_]+\](?=\[(?:\w+_attributes)\])/g, '[$1][]');
636+
637+
if (form.data('clientSideValidations').html_settings.type === 'SimpleForm::FormBuilder') {
638+
elementName = elementName.replace(/\]\[\]$/g, ']'); // fix many association collections
639+
}
640+
635641
var nestedMatches = elementName.match(/\[(\w+_attributes)\].*\[(\w+)\]$/);
636642

637643
if (nestedMatches) {
@@ -641,12 +647,12 @@
641647
return elementName;
642648
};
643649

644-
var validatorsFor = function validatorsFor(elementName, validators) {
650+
var validatorsFor = function validatorsFor(elementName, validators, form) {
645651
if (Object.prototype.hasOwnProperty.call(validators, elementName)) {
646652
return validators[elementName];
647653
}
648654

649-
return validators[cleanElementName(elementName, validators)] || {};
655+
return validators[cleanElementName(elementName, validators, form)] || {};
650656
};
651657

652658
var validateForm = function validateForm(form, validators) {

src/main.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ $.fn.isValid = function (validators) {
6666
if (obj.is('form')) {
6767
return validateForm(obj, validators)
6868
} else {
69-
return validateElement(obj, validatorsFor(this[0].name, validators))
69+
const form = this.closest('form')
70+
return validateElement(obj, validatorsFor(this[0].name, validators, form))
7071
}
7172
}
7273

@@ -80,9 +81,13 @@ const cleanNestedElementName = (elementName, nestedMatches, validators) => {
8081
return elementName
8182
}
8283

83-
const cleanElementName = (elementName, validators) => {
84+
const cleanElementName = (elementName, validators, form) => {
8485
elementName = elementName.replace(/\[(\w+_attributes)\]\[[\da-z_]+\](?=\[(?:\w+_attributes)\])/g, '[$1][]')
8586

87+
if (form.data('clientSideValidations').html_settings.type === 'SimpleForm::FormBuilder') {
88+
elementName = elementName.replace(/\]\[\]$/g, ']') // fix many association collections
89+
}
90+
8691
const nestedMatches = elementName.match(/\[(\w+_attributes)\].*\[(\w+)\]$/)
8792

8893
if (nestedMatches) {
@@ -92,12 +97,12 @@ const cleanElementName = (elementName, validators) => {
9297
return elementName
9398
}
9499

95-
const validatorsFor = (elementName, validators) => {
100+
const validatorsFor = (elementName, validators, form) => {
96101
if (Object.prototype.hasOwnProperty.call(validators, elementName)) {
97102
return validators[elementName]
98103
}
99104

100-
return validators[cleanElementName(elementName, validators)] || {}
105+
return validators[cleanElementName(elementName, validators, form)] || {}
101106
}
102107

103108
const validateForm = (form, validators) => {

vendor/assets/javascripts/rails.validations.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,8 @@
616616
if (obj.is('form')) {
617617
return validateForm(obj, validators);
618618
} else {
619-
return validateElement(obj, validatorsFor(this[0].name, validators));
619+
var form = this.closest('form');
620+
return validateElement(obj, validatorsFor(this[0].name, validators, form));
620621
}
621622
};
622623

@@ -630,8 +631,13 @@
630631
return elementName;
631632
};
632633

633-
var cleanElementName = function cleanElementName(elementName, validators) {
634+
var cleanElementName = function cleanElementName(elementName, validators, form) {
634635
elementName = elementName.replace(/\[(\w+_attributes)\]\[[\da-z_]+\](?=\[(?:\w+_attributes)\])/g, '[$1][]');
636+
637+
if (form.data('clientSideValidations').html_settings.type === 'SimpleForm::FormBuilder') {
638+
elementName = elementName.replace(/\]\[\]$/g, ']'); // fix many association collections
639+
}
640+
635641
var nestedMatches = elementName.match(/\[(\w+_attributes)\].*\[(\w+)\]$/);
636642

637643
if (nestedMatches) {
@@ -641,12 +647,12 @@
641647
return elementName;
642648
};
643649

644-
var validatorsFor = function validatorsFor(elementName, validators) {
650+
var validatorsFor = function validatorsFor(elementName, validators, form) {
645651
if (Object.prototype.hasOwnProperty.call(validators, elementName)) {
646652
return validators[elementName];
647653
}
648654

649-
return validators[cleanElementName(elementName, validators)] || {};
655+
return validators[cleanElementName(elementName, validators, form)] || {};
650656
};
651657

652658
var validateForm = function validateForm(form, validators) {

0 commit comments

Comments
 (0)