client_side_validations 17.0.0 → 18.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -0
- data/LICENSE.md +1 -1
- data/README.md +5 -5
- data/lib/client_side_validations/action_view/form_builder.rb +6 -1
- data/lib/client_side_validations/action_view/form_helper.rb +3 -3
- data/lib/client_side_validations/action_view/form_with_helper.rb +1 -1
- data/lib/client_side_validations/active_model.rb +4 -2
- data/lib/client_side_validations/active_model/conditionals.rb +3 -3
- data/lib/client_side_validations/active_model/numericality.rb +9 -1
- data/lib/client_side_validations/config.rb +1 -3
- data/lib/client_side_validations/files.rb +2 -2
- data/lib/client_side_validations/version.rb +1 -1
- data/lib/generators/client_side_validations/copy_assets_generator.rb +1 -1
- data/vendor/assets/javascripts/rails.validations.js +64 -62
- metadata +35 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e48473024c86d20fe68330cfeb13e2fdc29e4c0a8c619fb51e980d03ec8aae7
|
4
|
+
data.tar.gz: 67c48790216518f72154e35c22914f4464edea104eaf1538daa772eb5b71ccfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 865cfdfb27838f0fc6718a4fa39ce731c05838a03e4e92d700b0f14a1cf555f782a0db1aab98d38eac8fa2d4cb807a109a551b11b454c563a6f3b60f322b19ca
|
7
|
+
data.tar.gz: d649a17bf8585839bb0b2ccff97b4f63ee0ddeed9532ca5c97158db427ff8291aea086bc38f0fa440f8f8ac87c6621356b15688689c0b58bb86fc5684ee7190a
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,36 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 18.1.0 / 2021-06-13
|
4
|
+
|
5
|
+
* [FEATURE] Add support to `fields` method ([#828](https://github.com/DavyJonesLocker/client_side_validations/pull/828))
|
6
|
+
* [ENHANCEMENT] Test against jQuery 3.6.0 by default
|
7
|
+
* [ENHANCEMENT] Test against latest Ruby versions
|
8
|
+
* [ENHANCEMENT] Update QUnit to 2.15.0
|
9
|
+
|
10
|
+
## 18.0.0 / 2021-02-13
|
11
|
+
|
12
|
+
* [FEATURE] Add Rails 7.0.pre compatibility
|
13
|
+
* [ENHANCEMENT] Default branch is now `main` **POSSIBLE BREAKING CHANGE!**
|
14
|
+
* [ENHANCEMENT] Update QUnit to 2.14.0
|
15
|
+
* [ENHANCEMENT] Update development dependencies
|
16
|
+
|
17
|
+
## 17.2.0 / 2020-11-03
|
18
|
+
|
19
|
+
* [FEATURE] Add Rails 6.1.0.rc1 compatibility
|
20
|
+
* [ENHANCEMENT] Update development dependencies
|
21
|
+
|
22
|
+
## 17.1.1 / 2020-10-31
|
23
|
+
|
24
|
+
* [ENHANCEMENT] Minor code cleanup
|
25
|
+
* [ENHANCEMENT] Update development dependencies
|
26
|
+
|
27
|
+
## 17.1.0 / 2020-10-10
|
28
|
+
|
29
|
+
* [FEATURE] Allow Ruby 3.0.0
|
30
|
+
* [ENHANCEMENT] Test against latest Ruby 2.7.2
|
31
|
+
* [ENHANCEMENT] Update QUnit to 2.11.3
|
32
|
+
* [ENHANCEMENT] Update development dependencies
|
33
|
+
|
3
34
|
## 17.0.0 / 2020-05-16
|
4
35
|
|
5
36
|
* [FEATURE] Drop Ruby 2.3 support
|
data/LICENSE.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c)
|
3
|
+
Copyright (c) 2021 Geremia Taglialatela, Brian Cardarella
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
@@ -3,12 +3,12 @@
|
|
3
3
|
[](https://badge.fury.io/rb/client_side_validations)
|
4
4
|
[](https://badge.fury.io/js/%40client-side-validations%2Fclient-side-validations)
|
5
5
|
[](https://dependabot.com/compatibility-score.html?dependency-name=client_side_validations&package-manager=bundler&version-scheme=semver)
|
6
|
-
[](https://travis-ci.org/DavyJonesLocker/client_side_validations)
|
7
7
|
[](https://codeclimate.com/github/DavyJonesLocker/client_side_validations/maintainability)
|
8
|
-
[](https://coveralls.io/github/DavyJonesLocker/client_side_validations?branch=main)
|
9
9
|
|
10
10
|
|
11
|
-
`ClientSideValidations` made easy for your Rails 5.x / Rails 6.
|
11
|
+
`ClientSideValidations` made easy for your Rails 5.x / Rails 6.x applications!
|
12
12
|
|
13
13
|
## Project Goals ##
|
14
14
|
|
@@ -538,12 +538,12 @@ This gem follows [Semantic Versioning](https://semver.org)
|
|
538
538
|
## Want to help? ##
|
539
539
|
|
540
540
|
Please do! We are always looking to improve this gem. Please see our
|
541
|
-
[Contribution Guidelines](https://github.com/DavyJonesLocker/client_side_validations/blob/
|
541
|
+
[Contribution Guidelines](https://github.com/DavyJonesLocker/client_side_validations/blob/main/CONTRIBUTING.md)
|
542
542
|
on how to properly submit issues and pull requests.
|
543
543
|
|
544
544
|
## Legal ##
|
545
545
|
|
546
|
-
[DockYard](https://dockyard.com/), LLC © 2012-
|
546
|
+
[DockYard](https://dockyard.com/), LLC © 2012-2021
|
547
547
|
|
548
548
|
[@dockyard](https://twitter.com/dockyard)
|
549
549
|
|
@@ -5,7 +5,7 @@ module ClientSideValidations
|
|
5
5
|
module Helpers
|
6
6
|
module FormBuilder
|
7
7
|
def self.prepended(base)
|
8
|
-
(base.field_helpers - %i[label check_box radio_button fields_for hidden_field file_field]).each do |selector|
|
8
|
+
(base.field_helpers - %i[label check_box radio_button fields_for fields hidden_field file_field]).each do |selector|
|
9
9
|
base.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
10
10
|
# Cannot call super here, rewrite all
|
11
11
|
def #{selector}(method, options = {}) # def text_field(method, options = {})
|
@@ -72,6 +72,11 @@ module ClientSideValidations
|
|
72
72
|
super(record_name, record_object, fields_options, &block)
|
73
73
|
end
|
74
74
|
|
75
|
+
def fields(scope = nil, model: nil, **options, &block)
|
76
|
+
options[:validate] ||= @options[:validate] if @options[:validate] && !options.key?(:validate)
|
77
|
+
super(scope, model: model, **options, &block)
|
78
|
+
end
|
79
|
+
|
75
80
|
def file_field(method, options = {})
|
76
81
|
build_validation_options(method, options)
|
77
82
|
options.delete(:validate)
|
@@ -13,7 +13,7 @@ module ClientSideValidations
|
|
13
13
|
# We are not going to use super here, because we need
|
14
14
|
# to inject the csv options in a data attribute in a clean way.
|
15
15
|
# So we basically reimplement the whole form_for method
|
16
|
-
raise ArgumentError, 'Missing block' unless
|
16
|
+
raise ArgumentError, 'Missing block' unless block
|
17
17
|
|
18
18
|
html_options = options[:html] ||= {}
|
19
19
|
|
@@ -98,10 +98,10 @@ module ClientSideValidations
|
|
98
98
|
def add_validator(validator_hash, validation_hash, name, attr)
|
99
99
|
if validation_hash.key?(attr)
|
100
100
|
validator_hash[name] = validation_hash[attr]
|
101
|
-
elsif attr.to_s.
|
101
|
+
elsif attr.to_s.end_with?('_id')
|
102
102
|
association_name = attr.to_s.gsub(/_id\Z/, '').to_sym
|
103
103
|
add_validator_with_association validator_hash, validation_hash, name, association_name
|
104
|
-
elsif attr.to_s.
|
104
|
+
elsif attr.to_s.end_with?('_ids')
|
105
105
|
association_name = attr.to_s.gsub(/_ids\Z/, '').pluralize.to_sym
|
106
106
|
add_validator_with_association validator_hash, validation_hash, name, association_name
|
107
107
|
end
|
@@ -12,7 +12,7 @@ module ClientSideValidations
|
|
12
12
|
|
13
13
|
url, model, scope = check_model(url, model, format, scope) if model
|
14
14
|
|
15
|
-
if
|
15
|
+
if block
|
16
16
|
form_tag_with_validators scope, model, options, url, &block
|
17
17
|
else
|
18
18
|
html_options = html_options_for_form_with(url, model, **options)
|
@@ -36,9 +36,11 @@ module ClientSideValidations
|
|
36
36
|
module Validations
|
37
37
|
include ClientSideValidations::ActiveModel::Conditionals
|
38
38
|
|
39
|
+
ATTRIBUTES_DENYLIST = [nil, :block].freeze
|
40
|
+
|
39
41
|
def client_side_validation_hash(force = nil)
|
40
42
|
_validators.inject({}) do |attr_hash, attr|
|
41
|
-
next attr_hash if
|
43
|
+
next attr_hash if ATTRIBUTES_DENYLIST.include?(attr[0])
|
42
44
|
|
43
45
|
validator_hash = validator_hash_for(attr, force)
|
44
46
|
|
@@ -91,7 +93,7 @@ module ClientSideValidations
|
|
91
93
|
end
|
92
94
|
|
93
95
|
def will_save_change?(options)
|
94
|
-
options.is_a?(Symbol) && (options.to_s.
|
96
|
+
options.is_a?(Symbol) && (options.to_s.end_with?('changed?') || options.to_s.start_with?('will_save_change_to'))
|
95
97
|
end
|
96
98
|
|
97
99
|
def check_conditionals(attr, validator, force)
|
@@ -28,9 +28,9 @@ module ClientSideValidations
|
|
28
28
|
raise ArgumentError, 'Missing argument'
|
29
29
|
end
|
30
30
|
when String
|
31
|
-
# rubocop:disable Security/Eval
|
32
|
-
l = eval("
|
33
|
-
# rubocop:enable Security/Eval
|
31
|
+
# rubocop:disable Security/Eval, Style/DocumentDynamicEvalDefinition
|
32
|
+
l = eval("->(value) { #{conditional} }", binding, __FILE__, __LINE__)
|
33
|
+
# rubocop:enable Security/Eval, Style/DocumentDynamicEvalDefinition
|
34
34
|
instance_exec(nil, &l)
|
35
35
|
when Symbol
|
36
36
|
send conditional
|
@@ -6,7 +6,15 @@ module ClientSideValidations
|
|
6
6
|
@@option_map = {}
|
7
7
|
|
8
8
|
def self.included(base)
|
9
|
-
|
9
|
+
checks =
|
10
|
+
if base.const_defined?('RESERVED_OPTIONS')
|
11
|
+
base::RESERVED_OPTIONS - [:only_integer]
|
12
|
+
else
|
13
|
+
base::CHECKS.keys
|
14
|
+
end
|
15
|
+
|
16
|
+
@@option_map.merge!(checks.inject({}) { |acc, elem| acc.merge!(elem => elem) })
|
17
|
+
super
|
10
18
|
end
|
11
19
|
|
12
20
|
def client_side_hash(model, attribute, force = nil)
|
@@ -3,9 +3,7 @@
|
|
3
3
|
module ClientSideValidations
|
4
4
|
module Config
|
5
5
|
class << self
|
6
|
-
attr_accessor :disabled_validators
|
7
|
-
attr_accessor :number_format_with_locale
|
8
|
-
attr_accessor :root_path
|
6
|
+
attr_accessor :disabled_validators, :number_format_with_locale, :root_path
|
9
7
|
end
|
10
8
|
|
11
9
|
self.disabled_validators = []
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
module ClientSideValidations
|
6
6
|
module Files
|
7
|
-
Initializer = File.expand_path(
|
8
|
-
Javascript = File.expand_path(
|
7
|
+
Initializer = File.expand_path('../generators/templates/client_side_validations/initializer.rb', __dir__)
|
8
|
+
Javascript = File.expand_path('../../vendor/assets/javascripts/rails.validations.js', __dir__)
|
9
9
|
end
|
10
10
|
end
|
@@ -4,7 +4,7 @@ module ClientSideValidations
|
|
4
4
|
module Generators
|
5
5
|
class CopyAssetsGenerator < Rails::Generators::Base
|
6
6
|
def copy_javascript_asset
|
7
|
-
return unless
|
7
|
+
return unless instance_of?(CopyAssetsGenerator) || copy_assets?
|
8
8
|
|
9
9
|
assets.each do |asset|
|
10
10
|
source_paths << asset[:path]
|
@@ -1,16 +1,18 @@
|
|
1
1
|
/*!
|
2
|
-
* Client Side Validations JS - v0.1.
|
3
|
-
* Copyright (c)
|
2
|
+
* Client Side Validations JS - v0.1.5 (https://github.com/DavyJonesLocker/client_side_validations)
|
3
|
+
* Copyright (c) 2021 Geremia Taglialatela, Brian Cardarella
|
4
4
|
* Licensed under MIT (https://opensource.org/licenses/mit-license.php)
|
5
5
|
*/
|
6
6
|
|
7
7
|
(function (global, factory) {
|
8
8
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :
|
9
9
|
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
|
10
|
-
(global = global || self, global.ClientSideValidations = factory(global.$));
|
10
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ClientSideValidations = factory(global.$));
|
11
11
|
}(this, (function ($) { 'use strict';
|
12
12
|
|
13
|
-
|
13
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
14
|
+
|
15
|
+
var $__default = /*#__PURE__*/_interopDefaultLegacy($);
|
14
16
|
|
15
17
|
function _typeof(obj) {
|
16
18
|
"@babel/helpers - typeof";
|
@@ -78,25 +80,25 @@
|
|
78
80
|
input: function input(form) {
|
79
81
|
return {
|
80
82
|
'focusout.ClientSideValidations': function focusoutClientSideValidations() {
|
81
|
-
$(this).isValid(form.ClientSideValidations.settings.validators);
|
83
|
+
$__default['default'](this).isValid(form.ClientSideValidations.settings.validators);
|
82
84
|
},
|
83
85
|
'change.ClientSideValidations': function changeClientSideValidations() {
|
84
|
-
$(this).data('changed', true);
|
86
|
+
$__default['default'](this).data('changed', true);
|
85
87
|
},
|
86
88
|
'element:validate:after.ClientSideValidations': function elementValidateAfterClientSideValidations(eventData) {
|
87
|
-
ClientSideValidations.callbacks.element.after($(this), eventData);
|
89
|
+
ClientSideValidations.callbacks.element.after($__default['default'](this), eventData);
|
88
90
|
},
|
89
91
|
'element:validate:before.ClientSideValidations': function elementValidateBeforeClientSideValidations(eventData) {
|
90
|
-
ClientSideValidations.callbacks.element.before($(this), eventData);
|
92
|
+
ClientSideValidations.callbacks.element.before($__default['default'](this), eventData);
|
91
93
|
},
|
92
94
|
'element:validate:fail.ClientSideValidations': function elementValidateFailClientSideValidations(eventData, message) {
|
93
|
-
var $element = $(this);
|
95
|
+
var $element = $__default['default'](this);
|
94
96
|
ClientSideValidations.callbacks.element.fail($element, message, function () {
|
95
97
|
return form.ClientSideValidations.addError($element, message);
|
96
98
|
}, eventData);
|
97
99
|
},
|
98
100
|
'element:validate:pass.ClientSideValidations': function elementValidatePassClientSideValidations(eventData) {
|
99
|
-
var $element = $(this);
|
101
|
+
var $element = $__default['default'](this);
|
100
102
|
ClientSideValidations.callbacks.element.pass($element, function () {
|
101
103
|
return form.ClientSideValidations.removeError($element);
|
102
104
|
}, eventData);
|
@@ -116,7 +118,7 @@
|
|
116
118
|
},
|
117
119
|
enablers: {
|
118
120
|
form: function form(_form2) {
|
119
|
-
var $form = $(_form2);
|
121
|
+
var $form = $__default['default'](_form2);
|
120
122
|
_form2.ClientSideValidations = {
|
121
123
|
settings: $form.data('clientSideValidations'),
|
122
124
|
addError: function addError(element, message) {
|
@@ -138,23 +140,23 @@
|
|
138
140
|
});
|
139
141
|
},
|
140
142
|
input: function input(_input) {
|
141
|
-
var $input = $(_input);
|
143
|
+
var $input = $__default['default'](_input);
|
142
144
|
var form = _input.form;
|
143
|
-
var $form = $(form);
|
145
|
+
var $form = $__default['default'](form);
|
144
146
|
var eventsToBind = ClientSideValidations.eventsToBind.input(form);
|
145
147
|
|
146
148
|
for (var eventName in eventsToBind) {
|
147
149
|
var eventFunction = eventsToBind[eventName];
|
148
150
|
$input.filter(':not(:radio):not([id$=_confirmation])').each(function () {
|
149
|
-
return $(this).attr('data-validate', true);
|
151
|
+
return $__default['default'](this).attr('data-validate', true);
|
150
152
|
}).on(eventName, eventFunction);
|
151
153
|
}
|
152
154
|
|
153
155
|
$input.filter(':checkbox').on('change.ClientSideValidations', function () {
|
154
|
-
$(this).isValid(form.ClientSideValidations.settings.validators);
|
156
|
+
$__default['default'](this).isValid(form.ClientSideValidations.settings.validators);
|
155
157
|
});
|
156
158
|
$input.filter('[id$=_confirmation]').each(function () {
|
157
|
-
var $element = $(this);
|
159
|
+
var $element = $__default['default'](this);
|
158
160
|
var $elementToConfirm = $form.find('#' + this.id.match(/(.+)_confirmation/)[1] + ':input');
|
159
161
|
|
160
162
|
if ($elementToConfirm.length) {
|
@@ -162,7 +164,7 @@
|
|
162
164
|
|
163
165
|
for (var _eventName in _eventsToBind) {
|
164
166
|
var _eventFunction = _eventsToBind[_eventName];
|
165
|
-
$('#' + $element.attr('id')).on(_eventName, _eventFunction);
|
167
|
+
$__default['default']('#' + $element.attr('id')).on(_eventName, _eventFunction);
|
166
168
|
}
|
167
169
|
}
|
168
170
|
});
|
@@ -171,11 +173,11 @@
|
|
171
173
|
formBuilders: {
|
172
174
|
'ActionView::Helpers::FormBuilder': {
|
173
175
|
add: function add(element, settings, message) {
|
174
|
-
var form = $(element[0].form);
|
176
|
+
var form = $__default['default'](element[0].form);
|
175
177
|
|
176
178
|
if (element.data('valid') !== false && form.find("label.message[for='" + element.attr('id') + "']")[0] == null) {
|
177
|
-
var inputErrorField = $(settings.input_tag);
|
178
|
-
var labelErrorField = $(settings.label_tag);
|
179
|
+
var inputErrorField = $__default['default'](settings.input_tag);
|
180
|
+
var labelErrorField = $__default['default'](settings.label_tag);
|
179
181
|
var label = form.find("label[for='" + element.attr('id') + "']:not(.message)");
|
180
182
|
|
181
183
|
if (element.attr('autofocus')) {
|
@@ -193,11 +195,11 @@
|
|
193
195
|
form.find("label.message[for='" + element.attr('id') + "']").text(message);
|
194
196
|
},
|
195
197
|
remove: function remove(element, settings) {
|
196
|
-
var form = $(element[0].form);
|
197
|
-
var inputErrorFieldClass = $(settings.input_tag).attr('class');
|
198
|
+
var form = $__default['default'](element[0].form);
|
199
|
+
var inputErrorFieldClass = $__default['default'](settings.input_tag).attr('class');
|
198
200
|
var inputErrorField = element.closest('.' + inputErrorFieldClass.replace(/ /g, '.'));
|
199
201
|
var label = form.find("label[for='" + element.attr('id') + "']:not(.message)");
|
200
|
-
var labelErrorFieldClass = $(settings.label_tag).attr('class');
|
202
|
+
var labelErrorFieldClass = $__default['default'](settings.label_tag).attr('class');
|
201
203
|
var labelErrorField = label.closest('.' + labelErrorFieldClass.replace(/ /g, '.'));
|
202
204
|
|
203
205
|
if (inputErrorField[0]) {
|
@@ -211,8 +213,8 @@
|
|
211
213
|
},
|
212
214
|
patterns: {
|
213
215
|
numericality: {
|
214
|
-
"default":
|
215
|
-
only_integer:
|
216
|
+
"default": /^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/,
|
217
|
+
only_integer: /^[+-]?\d+$/
|
216
218
|
}
|
217
219
|
},
|
218
220
|
selectors: {
|
@@ -222,13 +224,13 @@
|
|
222
224
|
},
|
223
225
|
validators: {
|
224
226
|
all: function all() {
|
225
|
-
return
|
227
|
+
return $__default['default'].extend({}, ClientSideValidations.validators.local, ClientSideValidations.validators.remote);
|
226
228
|
},
|
227
229
|
local: {},
|
228
230
|
remote: {}
|
229
231
|
},
|
230
232
|
disable: function disable(target) {
|
231
|
-
var $target = $(target);
|
233
|
+
var $target = $__default['default'](target);
|
232
234
|
$target.off('.ClientSideValidations');
|
233
235
|
|
234
236
|
if ($target.is('form')) {
|
@@ -236,12 +238,12 @@
|
|
236
238
|
} else {
|
237
239
|
$target.removeData(['changed', 'valid']);
|
238
240
|
$target.filter(':input').each(function () {
|
239
|
-
$(this).removeAttr('data-validate');
|
241
|
+
$__default['default'](this).removeAttr('data-validate');
|
240
242
|
});
|
241
243
|
}
|
242
244
|
},
|
243
245
|
reset: function reset(form) {
|
244
|
-
var $form = $(form);
|
246
|
+
var $form = $__default['default'](form);
|
245
247
|
ClientSideValidations.disable(form);
|
246
248
|
|
247
249
|
for (var key in form.ClientSideValidations.settings.validators) {
|
@@ -253,12 +255,12 @@
|
|
253
255
|
start: function start() {
|
254
256
|
if (window.Turbolinks != null && window.Turbolinks.supported) {
|
255
257
|
var initializeOnEvent = window.Turbolinks.EVENTS != null ? 'page:change' : 'turbolinks:load';
|
256
|
-
$(document).on(initializeOnEvent, function () {
|
257
|
-
return $(ClientSideValidations.selectors.forms).validate();
|
258
|
+
$__default['default'](document).on(initializeOnEvent, function () {
|
259
|
+
return $__default['default'](ClientSideValidations.selectors.forms).validate();
|
258
260
|
});
|
259
261
|
} else {
|
260
|
-
$(function () {
|
261
|
-
return $(ClientSideValidations.selectors.forms).validate();
|
262
|
+
$__default['default'](function () {
|
263
|
+
return $__default['default'](ClientSideValidations.selectors.forms).validate();
|
262
264
|
});
|
263
265
|
}
|
264
266
|
}
|
@@ -342,7 +344,7 @@
|
|
342
344
|
}
|
343
345
|
};
|
344
346
|
|
345
|
-
var VALIDATIONS = {
|
347
|
+
var VALIDATIONS$1 = {
|
346
348
|
even: function even(a) {
|
347
349
|
return parseInt(a, 10) % 2 === 0;
|
348
350
|
},
|
@@ -375,7 +377,7 @@
|
|
375
377
|
|
376
378
|
if (validationElement.length === 1) {
|
377
379
|
var numberFormat = $form[0].ClientSideValidations.settings.number_format;
|
378
|
-
var otherFormattedValue =
|
380
|
+
var otherFormattedValue = $__default['default'].trim(validationElement.val()).replace(new RegExp('\\' + numberFormat.separator, 'g'), '.');
|
379
381
|
|
380
382
|
if (!isNaN(parseFloat(otherFormattedValue))) {
|
381
383
|
return otherFormattedValue;
|
@@ -393,9 +395,9 @@
|
|
393
395
|
};
|
394
396
|
|
395
397
|
var runFunctionValidations = function runFunctionValidations(formattedValue, $form, options) {
|
396
|
-
for (var validation in VALIDATIONS) {
|
398
|
+
for (var validation in VALIDATIONS$1) {
|
397
399
|
var validationOption = options[validation];
|
398
|
-
var validationFunction = VALIDATIONS[validation]; // Must check for null because this could be 0
|
400
|
+
var validationFunction = VALIDATIONS$1[validation]; // Must check for null because this could be 0
|
399
401
|
|
400
402
|
if (validationOption == null) {
|
401
403
|
continue;
|
@@ -407,7 +409,7 @@
|
|
407
409
|
}
|
408
410
|
};
|
409
411
|
|
410
|
-
var runValidations = function runValidations(formattedValue, $form, options) {
|
412
|
+
var runValidations$1 = function runValidations(formattedValue, $form, options) {
|
411
413
|
if (options.only_integer && !ClientSideValidations.patterns.numericality.only_integer.test(formattedValue)) {
|
412
414
|
return options.messages.only_integer;
|
413
415
|
}
|
@@ -426,13 +428,13 @@
|
|
426
428
|
return;
|
427
429
|
}
|
428
430
|
|
429
|
-
var $form = $(element[0].form);
|
431
|
+
var $form = $__default['default'](element[0].form);
|
430
432
|
var numberFormat = $form[0].ClientSideValidations.settings.number_format;
|
431
|
-
var formattedValue =
|
432
|
-
return runValidations(formattedValue, $form, options);
|
433
|
+
var formattedValue = $__default['default'].trim(value).replace(new RegExp('\\' + numberFormat.separator, 'g'), '.');
|
434
|
+
return runValidations$1(formattedValue, $form, options);
|
433
435
|
};
|
434
436
|
|
435
|
-
var VALIDATIONS
|
437
|
+
var VALIDATIONS = {
|
436
438
|
is: function is(a, b) {
|
437
439
|
return a === parseInt(b, 10);
|
438
440
|
},
|
@@ -444,10 +446,10 @@
|
|
444
446
|
}
|
445
447
|
};
|
446
448
|
|
447
|
-
var runValidations
|
448
|
-
for (var validation in VALIDATIONS
|
449
|
+
var runValidations = function runValidations(valueLength, options) {
|
450
|
+
for (var validation in VALIDATIONS) {
|
449
451
|
var validationOption = options[validation];
|
450
|
-
var validationFunction = VALIDATIONS
|
452
|
+
var validationFunction = VALIDATIONS[validation];
|
451
453
|
|
452
454
|
if (validationOption && !validationFunction(valueLength, validationOption)) {
|
453
455
|
return options.messages[validation];
|
@@ -462,7 +464,7 @@
|
|
462
464
|
return;
|
463
465
|
}
|
464
466
|
|
465
|
-
return runValidations
|
467
|
+
return runValidations(value.length, options);
|
466
468
|
};
|
467
469
|
|
468
470
|
var isInList = function isInList(value, otherValues) {
|
@@ -502,7 +504,7 @@
|
|
502
504
|
|
503
505
|
var confirmationLocalValidator = function confirmationLocalValidator(element, options) {
|
504
506
|
var value = element.val();
|
505
|
-
var confirmationValue = $('#' + element.attr('id') + '_confirmation').val();
|
507
|
+
var confirmationValue = $__default['default']('#' + element.attr('id') + '_confirmation').val();
|
506
508
|
|
507
509
|
if (!options.case_sensitive) {
|
508
510
|
value = value.toLowerCase();
|
@@ -521,12 +523,12 @@
|
|
521
523
|
}
|
522
524
|
|
523
525
|
if (otherValue === value) {
|
524
|
-
$(currentElement).data('notLocallyUnique', true);
|
526
|
+
$__default['default'](currentElement).data('notLocallyUnique', true);
|
525
527
|
return false;
|
526
528
|
}
|
527
529
|
|
528
|
-
if ($(currentElement).data('notLocallyUnique')) {
|
529
|
-
$(currentElement).removeData('notLocallyUnique').data('changed', true);
|
530
|
+
if ($__default['default'](currentElement).data('notLocallyUnique')) {
|
531
|
+
$__default['default'](currentElement).removeData('notLocallyUnique').data('changed', true);
|
530
532
|
}
|
531
533
|
|
532
534
|
return true;
|
@@ -544,7 +546,7 @@
|
|
544
546
|
var value = element.val();
|
545
547
|
var valid = true;
|
546
548
|
form.find(':input[name^="' + matches[1] + '"][name$="' + matches[2] + '"]').not(element).each(function () {
|
547
|
-
var otherValue = $(this).val();
|
549
|
+
var otherValue = $__default['default'](this).val();
|
548
550
|
|
549
551
|
if (!isLocallyUnique(this, value, otherValue, options.case_sensitive)) {
|
550
552
|
valid = false;
|
@@ -569,12 +571,12 @@
|
|
569
571
|
uniqueness: uniquenessLocalValidator
|
570
572
|
};
|
571
573
|
|
572
|
-
|
574
|
+
$__default['default'].fn.disableClientSideValidations = function () {
|
573
575
|
ClientSideValidations.disable(this);
|
574
576
|
return this;
|
575
577
|
};
|
576
578
|
|
577
|
-
|
579
|
+
$__default['default'].fn.enableClientSideValidations = function () {
|
578
580
|
var _this = this;
|
579
581
|
|
580
582
|
var selectors = {
|
@@ -582,7 +584,7 @@
|
|
582
584
|
inputs: 'input'
|
583
585
|
};
|
584
586
|
|
585
|
-
var _loop = function _loop() {
|
587
|
+
var _loop = function _loop(selector) {
|
586
588
|
var enablers = selectors[selector];
|
587
589
|
|
588
590
|
_this.filter(ClientSideValidations.selectors[selector]).each(function () {
|
@@ -591,28 +593,28 @@
|
|
591
593
|
};
|
592
594
|
|
593
595
|
for (var selector in selectors) {
|
594
|
-
_loop();
|
596
|
+
_loop(selector);
|
595
597
|
}
|
596
598
|
|
597
599
|
return this;
|
598
600
|
};
|
599
601
|
|
600
|
-
|
602
|
+
$__default['default'].fn.resetClientSideValidations = function () {
|
601
603
|
this.filter(ClientSideValidations.selectors.forms).each(function () {
|
602
604
|
return ClientSideValidations.reset(this);
|
603
605
|
});
|
604
606
|
return this;
|
605
607
|
};
|
606
608
|
|
607
|
-
|
609
|
+
$__default['default'].fn.validate = function () {
|
608
610
|
this.filter(ClientSideValidations.selectors.forms).each(function () {
|
609
|
-
return $(this).enableClientSideValidations();
|
611
|
+
return $__default['default'](this).enableClientSideValidations();
|
610
612
|
});
|
611
613
|
return this;
|
612
614
|
};
|
613
615
|
|
614
|
-
|
615
|
-
var obj = $(this[0]);
|
616
|
+
$__default['default'].fn.isValid = function (validators) {
|
617
|
+
var obj = $__default['default'](this[0]);
|
616
618
|
|
617
619
|
if (obj.is('form')) {
|
618
620
|
return validateForm(obj, validators);
|
@@ -654,7 +656,7 @@
|
|
654
656
|
var valid = true;
|
655
657
|
form.trigger('form:validate:before.ClientSideValidations');
|
656
658
|
form.find(ClientSideValidations.selectors.validate_inputs).each(function () {
|
657
|
-
if (!$(this).isValid(validators)) {
|
659
|
+
if (!$__default['default'](this).isValid(validators)) {
|
658
660
|
valid = false;
|
659
661
|
}
|
660
662
|
|
@@ -718,7 +720,7 @@
|
|
718
720
|
if (element.attr('name').search(/\[([^\]]*?)\]$/) >= 0) {
|
719
721
|
var destroyInputName = element.attr('name').replace(/\[([^\]]*?)\]$/, '[_destroy]');
|
720
722
|
|
721
|
-
if ($("input[name='" + destroyInputName + "']").val() === '1') {
|
723
|
+
if ($__default['default']("input[name='" + destroyInputName + "']").val() === '1') {
|
722
724
|
return true;
|
723
725
|
}
|
724
726
|
}
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: client_side_validations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 18.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geremia Taglialatela
|
8
8
|
- Brian Cardarella
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-06-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
version: 5.0.0.1
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '7.0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
version: 5.0.0.1
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '7.0'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: js_regex
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -51,14 +51,14 @@ dependencies:
|
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '2.
|
54
|
+
version: '2.4'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '2.
|
61
|
+
version: '2.4'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: byebug
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -77,16 +77,22 @@ dependencies:
|
|
77
77
|
name: coveralls_reborn
|
78
78
|
requirement: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.21'
|
83
|
+
- - "<"
|
81
84
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.
|
85
|
+
version: '0.23'
|
83
86
|
type: :development
|
84
87
|
prerelease: false
|
85
88
|
version_requirements: !ruby/object:Gem::Requirement
|
86
89
|
requirements:
|
87
|
-
- - "
|
90
|
+
- - ">="
|
88
91
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
92
|
+
version: '0.21'
|
93
|
+
- - "<"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0.23'
|
90
96
|
- !ruby/object:Gem::Dependency
|
91
97
|
name: m
|
92
98
|
requirement: !ruby/object:Gem::Requirement
|
@@ -121,14 +127,14 @@ dependencies:
|
|
121
127
|
requirements:
|
122
128
|
- - "~>"
|
123
129
|
- !ruby/object:Gem::Version
|
124
|
-
version: '1.
|
130
|
+
version: '1.12'
|
125
131
|
type: :development
|
126
132
|
prerelease: false
|
127
133
|
version_requirements: !ruby/object:Gem::Requirement
|
128
134
|
requirements:
|
129
135
|
- - "~>"
|
130
136
|
- !ruby/object:Gem::Version
|
131
|
-
version: '1.
|
137
|
+
version: '1.12'
|
132
138
|
- !ruby/object:Gem::Dependency
|
133
139
|
name: rake
|
134
140
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,62 +149,26 @@ dependencies:
|
|
143
149
|
- - "~>"
|
144
150
|
- !ruby/object:Gem::Version
|
145
151
|
version: '13.0'
|
146
|
-
- !ruby/object:Gem::Dependency
|
147
|
-
name: rubocop
|
148
|
-
requirement: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 0.83.0
|
153
|
-
type: :development
|
154
|
-
prerelease: false
|
155
|
-
version_requirements: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - "~>"
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: 0.83.0
|
160
|
-
- !ruby/object:Gem::Dependency
|
161
|
-
name: rubocop-performance
|
162
|
-
requirement: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - "~>"
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '1.5'
|
167
|
-
type: :development
|
168
|
-
prerelease: false
|
169
|
-
version_requirements: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - "~>"
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '1.5'
|
174
|
-
- !ruby/object:Gem::Dependency
|
175
|
-
name: rubocop-rails
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - "~>"
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '2.5'
|
181
|
-
type: :development
|
182
|
-
prerelease: false
|
183
|
-
version_requirements: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - "~>"
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '2.5'
|
188
152
|
- !ruby/object:Gem::Dependency
|
189
153
|
name: simplecov
|
190
154
|
requirement: !ruby/object:Gem::Requirement
|
191
155
|
requirements:
|
192
|
-
- - "
|
156
|
+
- - ">="
|
193
157
|
- !ruby/object:Gem::Version
|
194
158
|
version: 0.18.5
|
159
|
+
- - "<"
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0.22'
|
195
162
|
type: :development
|
196
163
|
prerelease: false
|
197
164
|
version_requirements: !ruby/object:Gem::Requirement
|
198
165
|
requirements:
|
199
|
-
- - "
|
166
|
+
- - ">="
|
200
167
|
- !ruby/object:Gem::Version
|
201
168
|
version: 0.18.5
|
169
|
+
- - "<"
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0.22'
|
202
172
|
- !ruby/object:Gem::Dependency
|
203
173
|
name: sqlite3
|
204
174
|
requirement: !ruby/object:Gem::Requirement
|
@@ -233,16 +203,16 @@ dependencies:
|
|
233
203
|
requirements:
|
234
204
|
- - "~>"
|
235
205
|
- !ruby/object:Gem::Version
|
236
|
-
version: '2.
|
206
|
+
version: '2.1'
|
237
207
|
type: :development
|
238
208
|
prerelease: false
|
239
209
|
version_requirements: !ruby/object:Gem::Requirement
|
240
210
|
requirements:
|
241
211
|
- - "~>"
|
242
212
|
- !ruby/object:Gem::Version
|
243
|
-
version: '2.
|
213
|
+
version: '2.1'
|
244
214
|
- !ruby/object:Gem::Dependency
|
245
|
-
name:
|
215
|
+
name: webrick
|
246
216
|
requirement: !ruby/object:Gem::Requirement
|
247
217
|
requirements:
|
248
218
|
- - "~>"
|
@@ -302,15 +272,15 @@ licenses:
|
|
302
272
|
- MIT
|
303
273
|
metadata:
|
304
274
|
bug_tracker_uri: https://github.com/DavyJonesLocker/client_side_validations/issues
|
305
|
-
changelog_uri: https://github.com/DavyJonesLocker/client_side_validations/blob/
|
275
|
+
changelog_uri: https://github.com/DavyJonesLocker/client_side_validations/blob/main/CHANGELOG.md
|
306
276
|
source_code_uri: https://github.com/DavyJonesLocker/client_side_validations
|
307
|
-
post_install_message:
|
277
|
+
post_install_message:
|
308
278
|
rdoc_options: []
|
309
279
|
require_paths:
|
310
280
|
- lib
|
311
281
|
required_ruby_version: !ruby/object:Gem::Requirement
|
312
282
|
requirements:
|
313
|
-
- - "
|
283
|
+
- - ">="
|
314
284
|
- !ruby/object:Gem::Version
|
315
285
|
version: '2.4'
|
316
286
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
@@ -319,8 +289,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
319
289
|
- !ruby/object:Gem::Version
|
320
290
|
version: '0'
|
321
291
|
requirements: []
|
322
|
-
rubygems_version: 3.1.
|
323
|
-
signing_key:
|
292
|
+
rubygems_version: 3.1.6
|
293
|
+
signing_key:
|
324
294
|
specification_version: 4
|
325
295
|
summary: Client Side Validations
|
326
296
|
test_files: []
|