Skip to content

Commit e700e92

Browse files
committed
Add support for Date/Time inputs (bootstrap4)
1 parent 0e71287 commit e700e92

9 files changed

Lines changed: 311 additions & 0 deletions

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@
22

33
source 'https://rubygems.org'
44

5+
gem 'client_side_validations', github: 'MichalRemis/client_side_validations', branch: 'SupportDateTimeSelects'
6+
57
gemspec

dist/simple-form.bootstrap4.esm.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,46 @@ ClientSideValidations.formBuilders['SimpleForm::FormBuilder'] = {
4545
element.removeClass('is-invalid');
4646
errorElement.remove();
4747
}
48+
},
49+
50+
get horizontal_multi_select() {
51+
return this.multi_select;
52+
},
53+
54+
get vertical_multi_select() {
55+
return this.multi_select;
56+
},
57+
58+
multi_select: {
59+
add: function add(element, settings, message) {
60+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
61+
var parentElement = element.parent();
62+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
63+
64+
if (!errorElement.length) {
65+
errorElement = $('<' + settings.error_tag + '>', {
66+
"class": 'invalid-feedback d-block',
67+
text: message
68+
});
69+
parentElement.after(errorElement);
70+
}
71+
72+
wrapperElement.addClass(settings.wrapper_error_class);
73+
element.addClass('is-invalid');
74+
errorElement.text(message);
75+
},
76+
remove: function remove(element, settings) {
77+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
78+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
79+
var invalidSiblingExists = element.siblings('.is-invalid').length;
80+
81+
if (!invalidSiblingExists) {
82+
wrapperElement.removeClass(settings.wrapper_error_class);
83+
errorElement.remove();
84+
}
85+
86+
element.removeClass('is-invalid');
87+
}
4888
}
4989
}
5090
};

dist/simple-form.bootstrap4.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,46 @@
5151
element.removeClass('is-invalid');
5252
errorElement.remove();
5353
}
54+
},
55+
56+
get horizontal_multi_select() {
57+
return this.multi_select;
58+
},
59+
60+
get vertical_multi_select() {
61+
return this.multi_select;
62+
},
63+
64+
multi_select: {
65+
add: function add(element, settings, message) {
66+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
67+
var parentElement = element.parent();
68+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
69+
70+
if (!errorElement.length) {
71+
errorElement = $('<' + settings.error_tag + '>', {
72+
"class": 'invalid-feedback d-block',
73+
text: message
74+
});
75+
parentElement.after(errorElement);
76+
}
77+
78+
wrapperElement.addClass(settings.wrapper_error_class);
79+
element.addClass('is-invalid');
80+
errorElement.text(message);
81+
},
82+
remove: function remove(element, settings) {
83+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
84+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
85+
var invalidSiblingExists = element.siblings('.is-invalid').length;
86+
87+
if (!invalidSiblingExists) {
88+
wrapperElement.removeClass(settings.wrapper_error_class);
89+
errorElement.remove();
90+
}
91+
92+
element.removeClass('is-invalid');
93+
}
5494
}
5595
}
5696
};

dist/simple-form.esm.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,46 @@ ClientSideValidations.formBuilders['SimpleForm::FormBuilder'] = {
4343
wrapper.removeClass(settings.wrapper_error_class);
4444
return errorElement.remove();
4545
}
46+
},
47+
48+
get horizontal_multi_select() {
49+
return this.multi_select;
50+
},
51+
52+
get vertical_multi_select() {
53+
return this.multi_select;
54+
},
55+
56+
multi_select: {
57+
add: function add(element, settings, message) {
58+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
59+
var parentElement = element.parent();
60+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
61+
62+
if (!errorElement.length) {
63+
errorElement = $('<' + settings.error_tag + '>', {
64+
"class": 'invalid-feedback d-block',
65+
text: message
66+
});
67+
parentElement.after(errorElement);
68+
}
69+
70+
wrapperElement.addClass(settings.wrapper_error_class);
71+
element.addClass('is-invalid');
72+
errorElement.text(message);
73+
},
74+
remove: function remove(element, settings) {
75+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
76+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
77+
var invalidSiblingExists = element.siblings('.is-invalid').length;
78+
79+
if (!invalidSiblingExists) {
80+
wrapperElement.removeClass(settings.wrapper_error_class);
81+
errorElement.remove();
82+
}
83+
84+
element.removeClass('is-invalid');
85+
}
4686
}
4787
}
4888
};

dist/simple-form.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,46 @@
4949
wrapper.removeClass(settings.wrapper_error_class);
5050
return errorElement.remove();
5151
}
52+
},
53+
54+
get horizontal_multi_select() {
55+
return this.multi_select;
56+
},
57+
58+
get vertical_multi_select() {
59+
return this.multi_select;
60+
},
61+
62+
multi_select: {
63+
add: function add(element, settings, message) {
64+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
65+
var parentElement = element.parent();
66+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
67+
68+
if (!errorElement.length) {
69+
errorElement = $('<' + settings.error_tag + '>', {
70+
"class": 'invalid-feedback d-block',
71+
text: message
72+
});
73+
parentElement.after(errorElement);
74+
}
75+
76+
wrapperElement.addClass(settings.wrapper_error_class);
77+
element.addClass('is-invalid');
78+
errorElement.text(message);
79+
},
80+
remove: function remove(element, settings) {
81+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
82+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
83+
var invalidSiblingExists = element.siblings('.is-invalid').length;
84+
85+
if (!invalidSiblingExists) {
86+
wrapperElement.removeClass(settings.wrapper_error_class);
87+
errorElement.remove();
88+
}
89+
90+
element.removeClass('is-invalid');
91+
}
5292
}
5393
}
5494
};

src/main.bootstrap4.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,41 @@ ClientSideValidations.formBuilders['SimpleForm::FormBuilder'] = {
3939
element.removeClass('is-invalid')
4040
errorElement.remove()
4141
}
42+
},
43+
get horizontal_multi_select () {
44+
return this.multi_select
45+
},
46+
get vertical_multi_select () {
47+
return this.multi_select
48+
},
49+
multi_select: {
50+
add (element, settings, message) {
51+
const wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'))
52+
const parentElement = element.parent()
53+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback')
54+
55+
if (!errorElement.length) {
56+
errorElement = $('<' + settings.error_tag + '>', { class: 'invalid-feedback d-block', text: message })
57+
parentElement.after(errorElement)
58+
}
59+
60+
wrapperElement.addClass(settings.wrapper_error_class)
61+
element.addClass('is-invalid')
62+
errorElement.text(message)
63+
},
64+
remove (element, settings) {
65+
const wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'))
66+
const errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback')
67+
68+
const invalidSiblingExists = element.siblings('.is-invalid').length
69+
70+
if (!invalidSiblingExists) {
71+
wrapperElement.removeClass(settings.wrapper_error_class)
72+
errorElement.remove()
73+
}
74+
75+
element.removeClass('is-invalid')
76+
}
4277
}
4378
}
4479
}

src/main.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,40 @@ ClientSideValidations.formBuilders['SimpleForm::FormBuilder'] = {
3737
wrapper.removeClass(settings.wrapper_error_class)
3838
return errorElement.remove()
3939
}
40+
},
41+
get horizontal_multi_select () {
42+
return this.multi_select
43+
},
44+
get vertical_multi_select () {
45+
return this.multi_select
46+
},
47+
multi_select: {
48+
add (element, settings, message) {
49+
const wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'))
50+
const parentElement = element.parent()
51+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback')
52+
53+
if (!errorElement.length) {
54+
errorElement = $('<' + settings.error_tag + '>', { class: 'invalid-feedback d-block', text: message })
55+
parentElement.after(errorElement)
56+
}
57+
58+
wrapperElement.addClass(settings.wrapper_error_class)
59+
element.addClass('is-invalid')
60+
errorElement.text(message)
61+
},
62+
remove (element, settings) {
63+
const wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'))
64+
const errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback')
65+
66+
const invalidSiblingExists = element.siblings('.is-invalid').length
67+
if (!invalidSiblingExists) {
68+
wrapperElement.removeClass(settings.wrapper_error_class)
69+
errorElement.remove()
70+
}
71+
72+
element.removeClass('is-invalid')
73+
}
4074
}
4175
}
4276
}

vendor/assets/javascripts/rails.validations.simple_form.bootstrap4.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,46 @@
5151
element.removeClass('is-invalid');
5252
errorElement.remove();
5353
}
54+
},
55+
56+
get horizontal_multi_select() {
57+
return this.multi_select;
58+
},
59+
60+
get vertical_multi_select() {
61+
return this.multi_select;
62+
},
63+
64+
multi_select: {
65+
add: function add(element, settings, message) {
66+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
67+
var parentElement = element.parent();
68+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
69+
70+
if (!errorElement.length) {
71+
errorElement = $('<' + settings.error_tag + '>', {
72+
"class": 'invalid-feedback d-block',
73+
text: message
74+
});
75+
parentElement.after(errorElement);
76+
}
77+
78+
wrapperElement.addClass(settings.wrapper_error_class);
79+
element.addClass('is-invalid');
80+
errorElement.text(message);
81+
},
82+
remove: function remove(element, settings) {
83+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
84+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
85+
var invalidSiblingExists = element.siblings('.is-invalid').length;
86+
87+
if (!invalidSiblingExists) {
88+
wrapperElement.removeClass(settings.wrapper_error_class);
89+
errorElement.remove();
90+
}
91+
92+
element.removeClass('is-invalid');
93+
}
5494
}
5595
}
5696
};

vendor/assets/javascripts/rails.validations.simple_form.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,46 @@
4949
wrapper.removeClass(settings.wrapper_error_class);
5050
return errorElement.remove();
5151
}
52+
},
53+
54+
get horizontal_multi_select() {
55+
return this.multi_select;
56+
},
57+
58+
get vertical_multi_select() {
59+
return this.multi_select;
60+
},
61+
62+
multi_select: {
63+
add: function add(element, settings, message) {
64+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
65+
var parentElement = element.parent();
66+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
67+
68+
if (!errorElement.length) {
69+
errorElement = $('<' + settings.error_tag + '>', {
70+
"class": 'invalid-feedback d-block',
71+
text: message
72+
});
73+
parentElement.after(errorElement);
74+
}
75+
76+
wrapperElement.addClass(settings.wrapper_error_class);
77+
element.addClass('is-invalid');
78+
errorElement.text(message);
79+
},
80+
remove: function remove(element, settings) {
81+
var wrapperElement = element.closest(settings.wrapper_tag + '.' + settings.wrapper_class.replace(/ /g, '.'));
82+
var errorElement = wrapperElement.find(settings.error_tag + '.invalid-feedback');
83+
var invalidSiblingExists = element.siblings('.is-invalid').length;
84+
85+
if (!invalidSiblingExists) {
86+
wrapperElement.removeClass(settings.wrapper_error_class);
87+
errorElement.remove();
88+
}
89+
90+
element.removeClass('is-invalid');
91+
}
5292
}
5393
}
5494
};

0 commit comments

Comments
 (0)