fomantic-ui 2.10.0-beta.8 → 2.10.0-beta.80
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.
- package/.eslintrc.js +6 -23
- package/.github/workflows/ci.yml +9 -9
- package/.github/workflows/depsreview.yml +1 -1
- package/.github/workflows/nightly.yml +7 -5
- package/.github/workflows/release.yml +2 -2
- package/.stylelintrc.js +1 -15
- package/CHANGELOG.md +5289 -2325
- package/README.md +8 -4
- package/changelog-setup.js +32 -10
- package/changelog-template.hbs +256 -251
- package/dist/components/accordion.css +1 -1
- package/dist/components/accordion.js +62 -73
- package/dist/components/accordion.min.css +1 -1
- package/dist/components/accordion.min.js +3 -3
- package/dist/components/ad.css +1 -1
- package/dist/components/ad.min.css +1 -1
- package/dist/components/api.js +101 -161
- package/dist/components/api.min.js +3 -3
- package/dist/components/breadcrumb.css +1 -1
- package/dist/components/breadcrumb.min.css +1 -1
- package/dist/components/button.css +5 -6
- package/dist/components/button.min.css +2 -2
- package/dist/components/calendar.css +3 -3
- package/dist/components/calendar.js +283 -332
- package/dist/components/calendar.min.css +2 -2
- package/dist/components/calendar.min.js +3 -3
- package/dist/components/card.css +1 -1
- package/dist/components/card.min.css +1 -1
- package/dist/components/checkbox.css +1 -1
- package/dist/components/checkbox.js +58 -79
- package/dist/components/checkbox.min.css +1 -1
- package/dist/components/checkbox.min.js +3 -3
- package/dist/components/comment.css +1 -1
- package/dist/components/comment.min.css +1 -1
- package/dist/components/container.css +1 -1
- package/dist/components/container.min.css +1 -1
- package/dist/components/dimmer.css +2 -2
- package/dist/components/dimmer.js +39 -52
- package/dist/components/dimmer.min.css +2 -2
- package/dist/components/dimmer.min.js +3 -3
- package/dist/components/divider.css +1 -1
- package/dist/components/divider.min.css +1 -1
- package/dist/components/dropdown.css +21 -35
- package/dist/components/dropdown.js +435 -531
- package/dist/components/dropdown.min.css +2 -2
- package/dist/components/dropdown.min.js +3 -3
- package/dist/components/embed.css +1 -1
- package/dist/components/embed.js +55 -68
- package/dist/components/embed.min.css +1 -1
- package/dist/components/embed.min.js +3 -3
- package/dist/components/emoji.css +3809 -7617
- package/dist/components/emoji.min.css +2 -2
- package/dist/components/feed.css +1 -1
- package/dist/components/feed.min.css +1 -1
- package/dist/components/flag.css +1 -1
- package/dist/components/flag.min.css +1 -1
- package/dist/components/flyout.css +1 -1
- package/dist/components/flyout.js +149 -168
- package/dist/components/flyout.min.css +1 -1
- package/dist/components/flyout.min.js +3 -3
- package/dist/components/form.css +3 -5
- package/dist/components/form.js +244 -269
- package/dist/components/form.min.css +2 -2
- package/dist/components/form.min.js +3 -3
- package/dist/components/grid.css +2 -2
- package/dist/components/grid.min.css +2 -2
- package/dist/components/header.css +6 -6
- package/dist/components/header.min.css +2 -2
- package/dist/components/icon.css +10 -37
- package/dist/components/icon.min.css +2 -2
- package/dist/components/image.css +1 -1
- package/dist/components/image.min.css +1 -1
- package/dist/components/input.css +284 -12
- package/dist/components/input.min.css +2 -2
- package/dist/components/item.css +1 -1
- package/dist/components/item.min.css +1 -1
- package/dist/components/label.css +6 -14
- package/dist/components/label.min.css +2 -2
- package/dist/components/list.css +3 -3
- package/dist/components/list.min.css +2 -2
- package/dist/components/loader.css +53 -53
- package/dist/components/loader.min.css +2 -2
- package/dist/components/menu.css +45 -60
- package/dist/components/menu.min.css +2 -2
- package/dist/components/message.css +2 -2
- package/dist/components/message.min.css +2 -2
- package/dist/components/modal.css +5 -5
- package/dist/components/modal.js +161 -170
- package/dist/components/modal.min.css +2 -2
- package/dist/components/modal.min.js +3 -3
- package/dist/components/nag.css +1 -1
- package/dist/components/nag.js +74 -88
- package/dist/components/nag.min.css +1 -1
- package/dist/components/nag.min.js +3 -3
- package/dist/components/placeholder.css +2 -2
- package/dist/components/placeholder.min.css +2 -2
- package/dist/components/popup.css +19 -73
- package/dist/components/popup.js +105 -138
- package/dist/components/popup.min.css +2 -2
- package/dist/components/popup.min.js +3 -3
- package/dist/components/progress.css +4 -13
- package/dist/components/progress.js +75 -97
- package/dist/components/progress.min.css +2 -2
- package/dist/components/progress.min.js +3 -3
- package/dist/components/rail.css +1 -1
- package/dist/components/rail.min.css +1 -1
- package/dist/components/rating.css +1 -1
- package/dist/components/rating.js +49 -61
- package/dist/components/rating.min.css +1 -1
- package/dist/components/rating.min.js +3 -3
- package/dist/components/reset.css +48 -208
- package/dist/components/reset.min.css +2 -2
- package/dist/components/reveal.css +2 -5
- package/dist/components/reveal.min.css +2 -2
- package/dist/components/search.css +2 -3
- package/dist/components/search.js +178 -198
- package/dist/components/search.min.css +2 -2
- package/dist/components/search.min.js +3 -3
- package/dist/components/segment.css +6 -6
- package/dist/components/segment.min.css +2 -2
- package/dist/components/shape.css +1 -1
- package/dist/components/shape.js +59 -69
- package/dist/components/shape.min.css +1 -1
- package/dist/components/shape.min.js +3 -3
- package/dist/components/sidebar.css +1 -1
- package/dist/components/sidebar.js +81 -101
- package/dist/components/sidebar.min.css +1 -1
- package/dist/components/sidebar.min.js +3 -3
- package/dist/components/site.css +1 -1
- package/dist/components/site.js +37 -58
- package/dist/components/site.min.css +1 -1
- package/dist/components/site.min.js +3 -3
- package/dist/components/slider.css +1 -1
- package/dist/components/slider.js +169 -183
- package/dist/components/slider.min.css +1 -1
- package/dist/components/slider.min.js +3 -3
- package/dist/components/state.js +45 -59
- package/dist/components/state.min.js +3 -3
- package/dist/components/statistic.css +1 -1
- package/dist/components/statistic.min.css +1 -1
- package/dist/components/step.css +4 -4
- package/dist/components/step.min.css +2 -2
- package/dist/components/sticky.css +1 -1
- package/dist/components/sticky.js +95 -117
- package/dist/components/sticky.min.css +1 -1
- package/dist/components/sticky.min.js +3 -3
- package/dist/components/tab.css +1 -1
- package/dist/components/tab.js +83 -115
- package/dist/components/tab.min.css +1 -1
- package/dist/components/tab.min.js +3 -3
- package/dist/components/table.css +8 -8
- package/dist/components/table.min.css +2 -2
- package/dist/components/text.css +1 -1
- package/dist/components/text.min.css +1 -1
- package/dist/components/toast.css +1 -1
- package/dist/components/toast.js +64 -74
- package/dist/components/toast.min.css +1 -1
- package/dist/components/toast.min.js +3 -3
- package/dist/components/transition.css +1 -1
- package/dist/components/transition.js +61 -85
- package/dist/components/transition.min.css +1 -1
- package/dist/components/transition.min.js +3 -3
- package/dist/components/visibility.js +120 -140
- package/dist/components/visibility.min.js +3 -3
- package/dist/semantic.css +4480 -8222
- package/dist/semantic.js +2881 -3485
- package/dist/semantic.min.css +3 -3
- package/dist/semantic.min.js +3 -3
- package/examples/attached.html +1 -1
- package/examples/components/menu.html +1 -1
- package/package.json +8 -5
- package/scripts/nightly-version.js +4 -4
- package/src/definitions/behaviors/api.js +100 -160
- package/src/definitions/behaviors/form.js +243 -268
- package/src/definitions/behaviors/state.js +44 -58
- package/src/definitions/behaviors/visibility.js +119 -139
- package/src/definitions/collections/breadcrumb.less +0 -1
- package/src/definitions/collections/form.less +3 -9
- package/src/definitions/collections/grid.less +1 -2
- package/src/definitions/collections/menu.less +106 -117
- package/src/definitions/collections/message.less +1 -2
- package/src/definitions/collections/table.less +7 -8
- package/src/definitions/elements/button.less +4 -6
- package/src/definitions/elements/container.less +0 -1
- package/src/definitions/elements/divider.less +1 -2
- package/src/definitions/elements/emoji.less +1 -1
- package/src/definitions/elements/flag.less +1 -1
- package/src/definitions/elements/header.less +4 -5
- package/src/definitions/elements/icon.less +10 -37
- package/src/definitions/elements/image.less +0 -1
- package/src/definitions/elements/input.less +4 -7
- package/src/definitions/elements/label.less +5 -14
- package/src/definitions/elements/list.less +2 -3
- package/src/definitions/elements/loader.less +10 -11
- package/src/definitions/elements/placeholder.less +1 -2
- package/src/definitions/elements/rail.less +0 -1
- package/src/definitions/elements/reveal.less +1 -5
- package/src/definitions/elements/segment.less +5 -6
- package/src/definitions/elements/step.less +3 -4
- package/src/definitions/elements/text.less +0 -1
- package/src/definitions/globals/reset.less +0 -1
- package/src/definitions/globals/site.js +36 -57
- package/src/definitions/globals/site.less +0 -1
- package/src/definitions/modules/accordion.js +61 -72
- package/src/definitions/modules/accordion.less +0 -1
- package/src/definitions/modules/calendar.js +282 -331
- package/src/definitions/modules/calendar.less +2 -3
- package/src/definitions/modules/checkbox.js +57 -78
- package/src/definitions/modules/checkbox.less +0 -1
- package/src/definitions/modules/dimmer.js +38 -51
- package/src/definitions/modules/dimmer.less +1 -2
- package/src/definitions/modules/dropdown.js +434 -530
- package/src/definitions/modules/dropdown.less +27 -38
- package/src/definitions/modules/embed.js +54 -67
- package/src/definitions/modules/embed.less +0 -1
- package/src/definitions/modules/flyout.js +148 -167
- package/src/definitions/modules/flyout.less +0 -1
- package/src/definitions/modules/modal.js +160 -169
- package/src/definitions/modules/modal.less +3 -4
- package/src/definitions/modules/nag.js +73 -87
- package/src/definitions/modules/nag.less +0 -1
- package/src/definitions/modules/popup.js +104 -137
- package/src/definitions/modules/popup.less +18 -73
- package/src/definitions/modules/progress.js +74 -96
- package/src/definitions/modules/progress.less +3 -13
- package/src/definitions/modules/rating.js +48 -60
- package/src/definitions/modules/rating.less +0 -1
- package/src/definitions/modules/search.js +177 -197
- package/src/definitions/modules/search.less +2 -4
- package/src/definitions/modules/shape.js +58 -68
- package/src/definitions/modules/shape.less +0 -1
- package/src/definitions/modules/sidebar.js +80 -100
- package/src/definitions/modules/sidebar.less +0 -1
- package/src/definitions/modules/slider.js +168 -182
- package/src/definitions/modules/slider.less +0 -1
- package/src/definitions/modules/sticky.js +94 -116
- package/src/definitions/modules/sticky.less +0 -1
- package/src/definitions/modules/tab.js +82 -114
- package/src/definitions/modules/tab.less +0 -1
- package/src/definitions/modules/toast.js +63 -73
- package/src/definitions/modules/toast.less +0 -1
- package/src/definitions/modules/transition.js +60 -84
- package/src/definitions/modules/transition.less +1 -2
- package/src/definitions/views/ad.less +0 -1
- package/src/definitions/views/card.less +0 -1
- package/src/definitions/views/comment.less +0 -1
- package/src/definitions/views/feed.less +0 -1
- package/src/definitions/views/item.less +0 -1
- package/src/definitions/views/statistic.less +0 -1
- package/src/semantic.less +1 -1
- package/src/themes/amazon/elements/button.overrides +1 -1
- package/src/themes/amazon/elements/button.variables +5 -6
- package/src/themes/amazon/globals/site.variables +2 -3
- package/src/themes/bookish/elements/header.variables +2 -2
- package/src/themes/bootstrap3/elements/button.variables +4 -5
- package/src/themes/chubby/collections/menu.variables +1 -1
- package/src/themes/chubby/elements/button.overrides +4 -4
- package/src/themes/chubby/modules/accordion.overrides +1 -1
- package/src/themes/chubby/views/comment.overrides +2 -2
- package/src/themes/chubby/views/comment.variables +2 -2
- package/src/themes/classic/collections/table.variables +2 -2
- package/src/themes/classic/elements/button.variables +11 -11
- package/src/themes/classic/modules/progress.variables +2 -2
- package/src/themes/classic/views/card.variables +2 -2
- package/src/themes/default/collections/form.variables +2 -3
- package/src/themes/default/collections/menu.variables +28 -28
- package/src/themes/default/collections/message.variables +1 -1
- package/src/themes/default/collections/table.variables +4 -4
- package/src/themes/default/elements/button.variables +9 -10
- package/src/themes/default/elements/divider.variables +1 -1
- package/src/themes/default/elements/icon.variables +2 -2
- package/src/themes/default/elements/image.variables +1 -1
- package/src/themes/default/elements/input.variables +2 -2
- package/src/themes/default/elements/label.variables +4 -4
- package/src/themes/default/elements/list.variables +1 -1
- package/src/themes/default/elements/placeholder.variables +6 -6
- package/src/themes/default/elements/segment.variables +8 -8
- package/src/themes/default/globals/reset.overrides +45 -201
- package/src/themes/default/globals/site.variables +50 -50
- package/src/themes/default/globals/variation.variables +3 -2
- package/src/themes/default/modules/accordion.variables +0 -1
- package/src/themes/default/modules/checkbox.variables +1 -1
- package/src/themes/default/modules/dimmer.variables +12 -12
- package/src/themes/default/modules/dropdown.variables +17 -16
- package/src/themes/default/modules/embed.variables +2 -2
- package/src/themes/default/modules/flyout.variables +3 -3
- package/src/themes/default/modules/modal.variables +14 -14
- package/src/themes/default/modules/nag.variables +1 -1
- package/src/themes/default/modules/rating.variables +1 -1
- package/src/themes/default/modules/search.variables +1 -1
- package/src/themes/default/modules/shape.variables +1 -1
- package/src/themes/default/modules/sidebar.variables +2 -2
- package/src/themes/default/modules/toast.variables +4 -4
- package/src/themes/default/views/card.variables +6 -7
- package/src/themes/default/views/feed.variables +4 -4
- package/src/themes/default/views/item.variables +2 -3
- package/src/themes/flat/collections/form.variables +1 -1
- package/src/themes/flat/globals/site.variables +9 -9
- package/src/themes/github/collections/form.overrides +3 -3
- package/src/themes/github/collections/form.variables +3 -3
- package/src/themes/github/collections/menu.overrides +1 -1
- package/src/themes/github/collections/menu.variables +10 -10
- package/src/themes/github/collections/message.variables +6 -6
- package/src/themes/github/elements/button.variables +17 -17
- package/src/themes/github/elements/input.variables +3 -3
- package/src/themes/github/elements/segment.variables +2 -2
- package/src/themes/github/elements/step.overrides +4 -4
- package/src/themes/github/elements/step.variables +3 -3
- package/src/themes/github/globals/site.variables +2 -2
- package/src/themes/github/modules/dropdown.variables +1 -3
- package/src/themes/gmail/collections/message.variables +2 -2
- package/src/themes/material/collections/menu.variables +1 -1
- package/src/themes/material/elements/button.overrides +4 -4
- package/src/themes/material/elements/button.variables +5 -5
- package/src/themes/material/modules/dropdown.variables +1 -1
- package/src/themes/material/modules/modal.variables +1 -1
- package/src/themes/raised/elements/button.variables +1 -1
- package/src/themes/round/elements/button.variables +12 -12
- package/src/themes/striped/modules/progress.overrides +3 -3
- package/src/themes/timeline/views/feed.variables +2 -2
- package/src/themes/twitter/elements/button.overrides +1 -1
- package/src/themes/twitter/elements/button.variables +4 -5
- package/tasks/admin/components/create.js +12 -15
- package/tasks/admin/components/init.js +11 -12
- package/tasks/admin/components/update.js +19 -20
- package/tasks/admin/distributions/create.js +30 -51
- package/tasks/admin/distributions/init.js +11 -12
- package/tasks/admin/distributions/update.js +18 -19
- package/tasks/admin/register.js +7 -7
- package/tasks/build/assets.js +1 -1
- package/tasks/build/css.js +5 -5
- package/tasks/build/javascript.js +1 -1
- package/tasks/config/admin/github.js +1 -1
- package/tasks/config/admin/templates/css-package.js +1 -1
- package/tasks/config/admin/templates/less-package.js +1 -1
- package/tasks/config/project/config.js +10 -10
- package/tasks/config/project/install.js +12 -12
- package/tasks/config/project/release.js +6 -12
- package/tasks/config/tasks.js +15 -11
- package/tasks/config/user.js +1 -4
- package/tasks/docs/metadata.js +18 -20
- package/tasks/install.js +14 -12
- package/test/meteor/assets.js +4 -4
- package/test/meteor/fonts.js +10 -11
- package/test/modules/module.spec.js +18 -18
|
@@ -19,20 +19,20 @@
|
|
|
19
19
|
? window
|
|
20
20
|
: globalThis;
|
|
21
21
|
|
|
22
|
-
$.fn.form = function (
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
$.fn.form = function (...args) {
|
|
23
|
+
const $allModules = $(this);
|
|
24
|
+
const $window = $(window);
|
|
25
25
|
|
|
26
26
|
let time = Date.now();
|
|
27
27
|
let performance = [];
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
const parameters = args[0];
|
|
30
|
+
const methodInvoked = typeof parameters === 'string';
|
|
31
|
+
const queryArguments = args.slice(1);
|
|
32
32
|
let returnedValue;
|
|
33
33
|
$allModules.each(function () {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
const $module = $(this);
|
|
35
|
+
const element = this;
|
|
36
36
|
|
|
37
37
|
let formErrors = [];
|
|
38
38
|
let formErrorsTracker = {};
|
|
@@ -64,12 +64,11 @@
|
|
|
64
64
|
|
|
65
65
|
let submitting = false;
|
|
66
66
|
let dirty = false;
|
|
67
|
-
|
|
67
|
+
const history = ['clean', 'clean'];
|
|
68
68
|
|
|
69
69
|
let instance;
|
|
70
|
-
let module;
|
|
71
70
|
|
|
72
|
-
module = {
|
|
71
|
+
const module = {
|
|
73
72
|
|
|
74
73
|
initialize: function () {
|
|
75
74
|
// settings grabbed at run time
|
|
@@ -79,7 +78,7 @@
|
|
|
79
78
|
if (instance === undefined) {
|
|
80
79
|
module.instantiate();
|
|
81
80
|
}
|
|
82
|
-
module.invoke(
|
|
81
|
+
module.invoke(parameters);
|
|
83
82
|
} else {
|
|
84
83
|
if (instance !== undefined) {
|
|
85
84
|
instance.invoke('destroy');
|
|
@@ -162,9 +161,9 @@
|
|
|
162
161
|
$module.on('keydown' + eventNamespace, selector.field, module.event.field.keydown);
|
|
163
162
|
}
|
|
164
163
|
$field.each(function (index, el) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
164
|
+
const $input = $(el);
|
|
165
|
+
const type = $input.prop('type');
|
|
166
|
+
const inputEvent = module.get.changeEvent(type, $input);
|
|
168
167
|
$input.on(inputEvent + eventNamespace, module.event.field.change);
|
|
169
168
|
});
|
|
170
169
|
|
|
@@ -177,16 +176,16 @@
|
|
|
177
176
|
+ ' click' + eventNamespace
|
|
178
177
|
+ ' keyup' + eventNamespace
|
|
179
178
|
+ ' keydown' + eventNamespace
|
|
180
|
-
+ ' blur' + eventNamespace, function (
|
|
181
|
-
module.determine.isDirty();
|
|
179
|
+
+ ' blur' + eventNamespace, function (event) {
|
|
180
|
+
module.determine.isDirty(event);
|
|
182
181
|
});
|
|
183
182
|
|
|
184
|
-
$module.on('dirty' + eventNamespace, function (
|
|
185
|
-
settings.onDirty.call();
|
|
183
|
+
$module.on('dirty' + eventNamespace, function (event) {
|
|
184
|
+
settings.onDirty.call(element, event);
|
|
186
185
|
});
|
|
187
186
|
|
|
188
|
-
$module.on('clean' + eventNamespace, function (
|
|
189
|
-
settings.onClean.call();
|
|
187
|
+
$module.on('clean' + eventNamespace, function (event) {
|
|
188
|
+
settings.onClean.call(element, event);
|
|
190
189
|
});
|
|
191
190
|
if (attachEventsSelector) {
|
|
192
191
|
module.attachEvents(attachEventsSelector, attachEventsAction);
|
|
@@ -195,16 +194,16 @@
|
|
|
195
194
|
|
|
196
195
|
clear: function () {
|
|
197
196
|
$field.each(function (index, el) {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
197
|
+
const $field = $(el);
|
|
198
|
+
const $element = $field.parent();
|
|
199
|
+
const $fieldGroup = $field.closest($group);
|
|
200
|
+
const $prompt = $fieldGroup.find(selector.prompt);
|
|
201
|
+
const $calendar = $field.closest(selector.uiCalendar);
|
|
202
|
+
const defaultValue = $field.data(metadata.defaultValue) || '';
|
|
203
|
+
const isCheckbox = $field.is(selector.checkbox);
|
|
204
|
+
const isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown');
|
|
205
|
+
const isCalendar = $calendar.length > 0 && module.can.useElement('calendar');
|
|
206
|
+
const isErrored = $fieldGroup.hasClass(className.error);
|
|
208
207
|
if (isErrored) {
|
|
209
208
|
module.verbose('Resetting error on field', $fieldGroup);
|
|
210
209
|
$fieldGroup.removeClass(className.error);
|
|
@@ -227,17 +226,17 @@
|
|
|
227
226
|
|
|
228
227
|
reset: function () {
|
|
229
228
|
$field.each(function (index, el) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
229
|
+
const $field = $(el);
|
|
230
|
+
const $element = $field.parent();
|
|
231
|
+
const $fieldGroup = $field.closest($group);
|
|
232
|
+
const $calendar = $field.closest(selector.uiCalendar);
|
|
233
|
+
const $prompt = $fieldGroup.find(selector.prompt);
|
|
234
|
+
const defaultValue = $field.data(metadata.defaultValue);
|
|
235
|
+
const isCheckbox = $field.is(selector.checkbox);
|
|
236
|
+
const isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown');
|
|
237
|
+
const isCalendar = $calendar.length > 0 && module.can.useElement('calendar');
|
|
238
|
+
const isFile = $field.is(selector.file);
|
|
239
|
+
const isErrored = $fieldGroup.hasClass(className.error);
|
|
241
240
|
if (defaultValue === undefined) {
|
|
242
241
|
return;
|
|
243
242
|
}
|
|
@@ -266,9 +265,9 @@
|
|
|
266
265
|
isValid: function () {
|
|
267
266
|
let allValid = true;
|
|
268
267
|
$field.each(function (index, el) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
268
|
+
const $el = $(el);
|
|
269
|
+
const validation = module.get.validation($el) || {};
|
|
270
|
+
const identifier = module.get.identifier(validation, $el);
|
|
272
271
|
if (!module.validate.field(validation, identifier, true)) {
|
|
273
272
|
allValid = false;
|
|
274
273
|
}
|
|
@@ -276,15 +275,14 @@
|
|
|
276
275
|
|
|
277
276
|
return allValid;
|
|
278
277
|
},
|
|
279
|
-
isDirty: function (
|
|
278
|
+
isDirty: function (event) {
|
|
280
279
|
let formIsDirty = false;
|
|
281
280
|
|
|
282
281
|
$field.each(function (index, el) {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
let isDirty;
|
|
282
|
+
const $el = $(el);
|
|
283
|
+
const isCheckbox = $el.filter(selector.checkbox).length > 0;
|
|
286
284
|
|
|
287
|
-
isDirty = isCheckbox
|
|
285
|
+
const isDirty = isCheckbox
|
|
288
286
|
? module.is.checkboxDirty($el)
|
|
289
287
|
: module.is.fieldDirty($el);
|
|
290
288
|
|
|
@@ -361,10 +359,10 @@
|
|
|
361
359
|
currentValue = currentValue.toString();
|
|
362
360
|
}
|
|
363
361
|
// Boolean values can be encoded as "true/false" or "True/False" depending on underlying frameworks, so we need a case-insensitive comparison
|
|
364
|
-
|
|
365
|
-
|
|
362
|
+
const boolRegex = /^(true|false)$/i;
|
|
363
|
+
const isBoolValue = boolRegex.test(initialValue) && boolRegex.test(currentValue);
|
|
366
364
|
if (isBoolValue) {
|
|
367
|
-
|
|
365
|
+
const regex = new RegExp('^' + initialValue + '$', 'i');
|
|
368
366
|
|
|
369
367
|
return !regex.test(currentValue);
|
|
370
368
|
}
|
|
@@ -372,8 +370,8 @@
|
|
|
372
370
|
return currentValue !== initialValue;
|
|
373
371
|
},
|
|
374
372
|
checkboxDirty: function ($el) {
|
|
375
|
-
|
|
376
|
-
|
|
373
|
+
const initialValue = $el.data(metadata.defaultValue);
|
|
374
|
+
const currentValue = $el.is(':checked');
|
|
377
375
|
|
|
378
376
|
return initialValue !== currentValue;
|
|
379
377
|
},
|
|
@@ -401,12 +399,12 @@
|
|
|
401
399
|
event: {
|
|
402
400
|
field: {
|
|
403
401
|
keydown: function (event) {
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
402
|
+
const $field = $(this);
|
|
403
|
+
const key = event.which;
|
|
404
|
+
const isInput = $field.is(selector.input);
|
|
405
|
+
const isCheckbox = $field.is(selector.checkbox);
|
|
406
|
+
const isInDropdown = $field.closest(selector.uiDropdown).length > 0;
|
|
407
|
+
const keyCode = {
|
|
410
408
|
enter: 13,
|
|
411
409
|
escape: 27,
|
|
412
410
|
};
|
|
@@ -431,9 +429,9 @@
|
|
|
431
429
|
event.preventDefault();
|
|
432
430
|
},
|
|
433
431
|
blur: function (event) {
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
432
|
+
const $field = $(this);
|
|
433
|
+
const validationRules = module.get.validation($field) || {};
|
|
434
|
+
const identifier = module.get.identifier(validationRules, $field);
|
|
437
435
|
if (settings.on === 'blur' || (!$module.hasClass(className.initial) && settings.revalidate)) {
|
|
438
436
|
module.debug('Revalidating field', $field, validationRules);
|
|
439
437
|
module.validate.field(validationRules, identifier);
|
|
@@ -443,9 +441,9 @@
|
|
|
443
441
|
}
|
|
444
442
|
},
|
|
445
443
|
change: function (event) {
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
444
|
+
const $field = $(this);
|
|
445
|
+
const validationRules = module.get.validation($field) || {};
|
|
446
|
+
const identifier = module.get.identifier(validationRules, $field);
|
|
449
447
|
if (settings.on === 'change' || (!$module.hasClass(className.initial) && settings.revalidate)) {
|
|
450
448
|
clearTimeout(module.timer);
|
|
451
449
|
module.timer = setTimeout(function () {
|
|
@@ -492,10 +490,10 @@
|
|
|
492
490
|
return rule.type;
|
|
493
491
|
},
|
|
494
492
|
changeEvent: function (type, $input) {
|
|
495
|
-
return ['file', 'checkbox', 'radio', 'hidden'].
|
|
493
|
+
return ['file', 'checkbox', 'radio', 'hidden'].includes(type) || $input.is('select') ? 'change' : 'input';
|
|
496
494
|
},
|
|
497
495
|
fieldsFromShorthand: function (fields) {
|
|
498
|
-
|
|
496
|
+
const fullFields = {};
|
|
499
497
|
$.each(fields, function (name, rules) {
|
|
500
498
|
if (!Array.isArray(rules) && typeof rules === 'object') {
|
|
501
499
|
fullFields[name] = rules;
|
|
@@ -510,13 +508,6 @@
|
|
|
510
508
|
fullFields[name].rules.push({ type: rule });
|
|
511
509
|
});
|
|
512
510
|
}
|
|
513
|
-
|
|
514
|
-
$.each(fullFields[name].rules, function (index, rule) {
|
|
515
|
-
let ruleName = module.get.ruleName(rule);
|
|
516
|
-
if (ruleName === 'empty') {
|
|
517
|
-
module.warn('*** DEPRECATED *** : Rule "empty" for field "' + name + '" will be removed in a future version. -> Use "notEmpty" rule instead.');
|
|
518
|
-
}
|
|
519
|
-
});
|
|
520
511
|
});
|
|
521
512
|
|
|
522
513
|
return fullFields;
|
|
@@ -525,42 +516,42 @@
|
|
|
525
516
|
return validation.identifier || $el.attr('id') || $el.attr('name') || $el.data(metadata.validate);
|
|
526
517
|
},
|
|
527
518
|
prompt: function (rule, field) {
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
519
|
+
const ruleName = module.get.ruleName(rule);
|
|
520
|
+
const ancillary = module.get.ancillaryValue(rule);
|
|
521
|
+
const $field = module.get.field(field.identifier);
|
|
522
|
+
const value = $field.val();
|
|
523
|
+
const promptCheck = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule;
|
|
533
524
|
let prompt = String(isFunction(promptCheck)
|
|
534
525
|
? promptCheck.call($field[0], value)
|
|
535
526
|
: promptCheck);
|
|
536
|
-
|
|
537
|
-
|
|
527
|
+
const requiresValue = prompt.search('{value}') !== -1;
|
|
528
|
+
const requiresName = prompt.search('{name}') !== -1;
|
|
538
529
|
let parts;
|
|
539
530
|
let suffixPrompt;
|
|
540
|
-
if (ancillary && ['integer', 'decimal', 'number', 'size'].
|
|
531
|
+
if (ancillary && ['integer', 'decimal', 'number', 'size'].includes(ruleName) && ancillary.includes('..')) {
|
|
541
532
|
parts = ancillary.split('..', 2);
|
|
542
533
|
if (!rule.prompt && ruleName !== 'size') {
|
|
543
534
|
suffixPrompt = parts[0] === ''
|
|
544
|
-
? settings.prompt.maxValue.
|
|
535
|
+
? settings.prompt.maxValue.replaceAll('{ruleValue}', '{max}')
|
|
545
536
|
: (parts[1] === ''
|
|
546
|
-
? settings.prompt.minValue.
|
|
537
|
+
? settings.prompt.minValue.replaceAll('{ruleValue}', '{min}')
|
|
547
538
|
: settings.prompt.range);
|
|
548
|
-
prompt += suffixPrompt.
|
|
539
|
+
prompt += suffixPrompt.replaceAll('{name}', ' ' + settings.text.and);
|
|
549
540
|
}
|
|
550
|
-
prompt = prompt.
|
|
551
|
-
prompt = prompt.
|
|
541
|
+
prompt = prompt.replaceAll('{min}', parts[0]);
|
|
542
|
+
prompt = prompt.replaceAll('{max}', parts[1]);
|
|
552
543
|
}
|
|
553
|
-
if (ancillary && ['match', 'different'].
|
|
554
|
-
prompt = prompt.
|
|
544
|
+
if (ancillary && ['match', 'different'].includes(ruleName)) {
|
|
545
|
+
prompt = prompt.replaceAll('{ruleValue}', module.get.fieldLabel(ancillary, true));
|
|
555
546
|
}
|
|
556
547
|
if (requiresValue) {
|
|
557
|
-
prompt = prompt.
|
|
548
|
+
prompt = prompt.replaceAll('{value}', $field.val());
|
|
558
549
|
}
|
|
559
550
|
if (requiresName) {
|
|
560
|
-
prompt = prompt.
|
|
551
|
+
prompt = prompt.replaceAll('{name}', module.get.fieldLabel($field));
|
|
561
552
|
}
|
|
562
|
-
prompt = prompt.
|
|
563
|
-
prompt = prompt.
|
|
553
|
+
prompt = prompt.replaceAll('{identifier}', field.identifier);
|
|
554
|
+
prompt = prompt.replaceAll('{ruleValue}', ancillary);
|
|
564
555
|
if (!rule.prompt) {
|
|
565
556
|
module.verbose('Using default validation prompt for type', prompt, ruleName);
|
|
566
557
|
}
|
|
@@ -631,10 +622,10 @@
|
|
|
631
622
|
return $fields;
|
|
632
623
|
},
|
|
633
624
|
fieldLabel: function (identifier, useIdAsFallback) {
|
|
634
|
-
|
|
625
|
+
const $field = typeof identifier === 'string'
|
|
635
626
|
? module.get.field(identifier)
|
|
636
627
|
: identifier;
|
|
637
|
-
|
|
628
|
+
const $label = $field.closest(selector.group).find('label:not(:empty)').eq(0);
|
|
638
629
|
|
|
639
630
|
return $label.length === 1
|
|
640
631
|
? $label.text()
|
|
@@ -661,30 +652,28 @@
|
|
|
661
652
|
return fieldValidation || false;
|
|
662
653
|
},
|
|
663
654
|
value: function (field, strict) {
|
|
664
|
-
|
|
665
|
-
let results;
|
|
666
|
-
let resultKeys;
|
|
655
|
+
const fields = [];
|
|
667
656
|
fields.push(field);
|
|
668
|
-
results = module.get.values.call(element, fields, strict);
|
|
669
|
-
resultKeys = Object.keys(results);
|
|
657
|
+
const results = module.get.values.call(element, fields, strict);
|
|
658
|
+
const resultKeys = Object.keys(results);
|
|
670
659
|
|
|
671
660
|
return resultKeys.length > 0 ? results[resultKeys[0]] : undefined;
|
|
672
661
|
},
|
|
673
662
|
values: function (fields, strict) {
|
|
674
|
-
|
|
663
|
+
const $fields = Array.isArray(fields) && fields.length > 0
|
|
675
664
|
? module.get.fields(fields, strict)
|
|
676
665
|
: $field;
|
|
677
|
-
|
|
666
|
+
const values = {};
|
|
678
667
|
$fields.each(function (index, field) {
|
|
679
|
-
|
|
680
|
-
|
|
668
|
+
const $field = $(field);
|
|
669
|
+
const $calendar = $field.closest(selector.uiCalendar);
|
|
681
670
|
let name = $field.prop('name') || $field.prop('id');
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
671
|
+
const value = $field.val();
|
|
672
|
+
const isCheckbox = $field.is(selector.checkbox);
|
|
673
|
+
const isRadio = $field.is(selector.radio);
|
|
674
|
+
const isMultiple = name.includes('[]');
|
|
675
|
+
const isCalendar = $calendar.length > 0 && module.can.useElement('calendar');
|
|
676
|
+
const isChecked = isCheckbox
|
|
688
677
|
? $field.is(':checked')
|
|
689
678
|
: false;
|
|
690
679
|
if (name) {
|
|
@@ -702,74 +691,73 @@
|
|
|
702
691
|
} else {
|
|
703
692
|
values[name].push(value);
|
|
704
693
|
}
|
|
705
|
-
} else {
|
|
706
|
-
if (
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
let date = $calendar.calendar('get date');
|
|
694
|
+
} else if (isRadio) {
|
|
695
|
+
if (values[name] === undefined || values[name] === false) {
|
|
696
|
+
values[name] = isChecked
|
|
697
|
+
? value || true
|
|
698
|
+
: false;
|
|
699
|
+
}
|
|
700
|
+
} else if (isCheckbox) {
|
|
701
|
+
values[name] = isChecked ? value || true : false;
|
|
702
|
+
} else if (isCalendar) {
|
|
703
|
+
const date = $calendar.calendar('get date');
|
|
716
704
|
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
705
|
+
if (date !== null) {
|
|
706
|
+
switch (settings.dateHandling) {
|
|
707
|
+
case 'date': {
|
|
708
|
+
values[name] = date;
|
|
721
709
|
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
710
|
+
break;
|
|
711
|
+
}
|
|
712
|
+
case 'input': {
|
|
713
|
+
values[name] = $calendar.calendar('get input date');
|
|
726
714
|
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
}
|
|
753
|
-
case 'year': {
|
|
754
|
-
values[name] = settings.formatter.year(date);
|
|
755
|
-
|
|
756
|
-
break;
|
|
757
|
-
}
|
|
758
|
-
default: {
|
|
759
|
-
module.debug('Wrong calendar mode', $calendar, type);
|
|
760
|
-
values[name] = '';
|
|
761
|
-
}
|
|
715
|
+
break;
|
|
716
|
+
}
|
|
717
|
+
case 'formatter': {
|
|
718
|
+
const type = $calendar.calendar('setting', 'type');
|
|
719
|
+
|
|
720
|
+
switch (type) {
|
|
721
|
+
case 'date': {
|
|
722
|
+
values[name] = settings.formatter.date(date);
|
|
723
|
+
|
|
724
|
+
break;
|
|
725
|
+
}
|
|
726
|
+
case 'datetime': {
|
|
727
|
+
values[name] = settings.formatter.datetime(date);
|
|
728
|
+
|
|
729
|
+
break;
|
|
730
|
+
}
|
|
731
|
+
case 'time': {
|
|
732
|
+
values[name] = settings.formatter.time(date);
|
|
733
|
+
|
|
734
|
+
break;
|
|
735
|
+
}
|
|
736
|
+
case 'month': {
|
|
737
|
+
values[name] = settings.formatter.month(date);
|
|
738
|
+
|
|
739
|
+
break;
|
|
762
740
|
}
|
|
741
|
+
case 'year': {
|
|
742
|
+
values[name] = settings.formatter.year(date);
|
|
763
743
|
|
|
764
|
-
|
|
744
|
+
break;
|
|
745
|
+
}
|
|
746
|
+
default: {
|
|
747
|
+
module.debug('Wrong calendar mode', $calendar, type);
|
|
748
|
+
values[name] = '';
|
|
749
|
+
}
|
|
765
750
|
}
|
|
751
|
+
|
|
752
|
+
break;
|
|
766
753
|
}
|
|
767
|
-
|
|
768
|
-
values[name] = '';
|
|
754
|
+
// no default
|
|
769
755
|
}
|
|
770
756
|
} else {
|
|
771
|
-
values[name] =
|
|
757
|
+
values[name] = '';
|
|
772
758
|
}
|
|
759
|
+
} else {
|
|
760
|
+
values[name] = value;
|
|
773
761
|
}
|
|
774
762
|
}
|
|
775
763
|
});
|
|
@@ -832,7 +820,7 @@
|
|
|
832
820
|
rules: [],
|
|
833
821
|
};
|
|
834
822
|
}
|
|
835
|
-
|
|
823
|
+
const newValidation = {
|
|
836
824
|
rules: [],
|
|
837
825
|
};
|
|
838
826
|
if (module.is.shorthandRules(rules)) {
|
|
@@ -865,11 +853,11 @@
|
|
|
865
853
|
if (errors === false) {
|
|
866
854
|
return;
|
|
867
855
|
}
|
|
868
|
-
|
|
869
|
-
|
|
856
|
+
const $field = module.get.field(identifier);
|
|
857
|
+
const $fieldGroup = $field.closest($group);
|
|
870
858
|
let $prompt = $fieldGroup.children(selector.prompt);
|
|
871
859
|
let promptExists = $prompt.length > 0;
|
|
872
|
-
|
|
860
|
+
const canTransition = settings.transition && module.can.useElement('transition');
|
|
873
861
|
module.verbose('Adding field error state', identifier);
|
|
874
862
|
if (!internal) {
|
|
875
863
|
$fieldGroup
|
|
@@ -930,8 +918,8 @@
|
|
|
930
918
|
if (tempErrors !== false) {
|
|
931
919
|
$.each(tempErrors, function (index, tempError) {
|
|
932
920
|
customErrors.push(settings.prompt.addErrors
|
|
933
|
-
.
|
|
934
|
-
.
|
|
921
|
+
.replaceAll('{name}', module.get.fieldLabel(id))
|
|
922
|
+
.replaceAll('{error}', tempError));
|
|
935
923
|
});
|
|
936
924
|
}
|
|
937
925
|
}
|
|
@@ -960,7 +948,7 @@
|
|
|
960
948
|
module.determine.isDirty();
|
|
961
949
|
},
|
|
962
950
|
rule: function (field, rule) {
|
|
963
|
-
|
|
951
|
+
const rules = Array.isArray(rule)
|
|
964
952
|
? rule
|
|
965
953
|
: [rule];
|
|
966
954
|
if (validation[field] === undefined || !Array.isArray(validation[field].rules)) {
|
|
@@ -977,14 +965,14 @@
|
|
|
977
965
|
return;
|
|
978
966
|
}
|
|
979
967
|
$.each(validation[field].rules, function (index, rule) {
|
|
980
|
-
if (rule && rules.
|
|
968
|
+
if (rule && rules.includes(rule.type)) {
|
|
981
969
|
module.debug('Removed rule', rule.type);
|
|
982
970
|
validation[field].rules.splice(index, 1);
|
|
983
971
|
}
|
|
984
972
|
});
|
|
985
973
|
},
|
|
986
974
|
field: function (field) {
|
|
987
|
-
|
|
975
|
+
const fields = Array.isArray(field)
|
|
988
976
|
? field
|
|
989
977
|
: [field];
|
|
990
978
|
$.each(fields, function (index, field) {
|
|
@@ -1006,9 +994,9 @@
|
|
|
1006
994
|
module.remove.field(fields);
|
|
1007
995
|
},
|
|
1008
996
|
prompt: function (identifier) {
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
997
|
+
const $field = module.get.field(identifier);
|
|
998
|
+
const $fieldGroup = $field.closest($group);
|
|
999
|
+
const $prompt = $fieldGroup.children(selector.prompt);
|
|
1012
1000
|
$fieldGroup
|
|
1013
1001
|
.removeClass(className.error);
|
|
1014
1002
|
if (settings.inline && $prompt.is(':visible')) {
|
|
@@ -1035,13 +1023,13 @@
|
|
|
1035
1023
|
},
|
|
1036
1024
|
defaults: function () {
|
|
1037
1025
|
$field.each(function (index, el) {
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1026
|
+
const $el = $(el);
|
|
1027
|
+
const $parent = $el.parent();
|
|
1028
|
+
const isCheckbox = $el.filter(selector.checkbox).length > 0;
|
|
1029
|
+
const isDropdown = ($parent.is(selector.uiDropdown) || $el.is(selector.uiDropdown)) && module.can.useElement('dropdown');
|
|
1030
|
+
const $calendar = $el.closest(selector.uiCalendar);
|
|
1031
|
+
const isCalendar = $calendar.length > 0 && module.can.useElement('calendar');
|
|
1032
|
+
const value = isCheckbox
|
|
1045
1033
|
? $el.is(':checked')
|
|
1046
1034
|
: $el.val();
|
|
1047
1035
|
if (isDropdown) {
|
|
@@ -1063,7 +1051,7 @@
|
|
|
1063
1051
|
.addClass(className.error);
|
|
1064
1052
|
},
|
|
1065
1053
|
value: function (field, value) {
|
|
1066
|
-
|
|
1054
|
+
const fields = {};
|
|
1067
1055
|
fields[field] = value;
|
|
1068
1056
|
|
|
1069
1057
|
return module.set.values.call(element, fields);
|
|
@@ -1073,16 +1061,16 @@
|
|
|
1073
1061
|
return;
|
|
1074
1062
|
}
|
|
1075
1063
|
$.each(fields, function (key, value) {
|
|
1076
|
-
|
|
1064
|
+
const $field = module.get.field(key);
|
|
1077
1065
|
let $element = $field.parent();
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1066
|
+
const $calendar = $field.closest(selector.uiCalendar);
|
|
1067
|
+
const isFile = $field.is(selector.file);
|
|
1068
|
+
const isMultiple = Array.isArray(value);
|
|
1069
|
+
const isCheckbox = $element.is(selector.uiCheckbox) && module.can.useElement('checkbox');
|
|
1070
|
+
const isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown');
|
|
1071
|
+
const isRadio = $field.is(selector.radio) && isCheckbox;
|
|
1072
|
+
const isCalendar = $calendar.length > 0 && module.can.useElement('calendar');
|
|
1073
|
+
const fieldExists = $field.length > 0;
|
|
1086
1074
|
let $multipleField;
|
|
1087
1075
|
if (fieldExists) {
|
|
1088
1076
|
if (isMultiple && isCheckbox) {
|
|
@@ -1161,18 +1149,18 @@
|
|
|
1161
1149
|
});
|
|
1162
1150
|
}
|
|
1163
1151
|
$field.each(function (_index, el) {
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1152
|
+
const $el = $(el);
|
|
1153
|
+
const $elGroup = $el.closest($group);
|
|
1154
|
+
const isCheckbox = $el.filter(selector.checkbox).length > 0;
|
|
1155
|
+
const isRequired = $el.prop('required') || $elGroup.hasClass(className.required) || $elGroup.parent().hasClass(className.required);
|
|
1156
|
+
const isDisabled = $el.is(':disabled') || $elGroup.hasClass(className.disabled) || $elGroup.parent().hasClass(className.disabled);
|
|
1157
|
+
const validation = module.get.validation($el);
|
|
1158
|
+
const hasNotEmptyRule = validation
|
|
1171
1159
|
? $.grep(validation.rules, function (rule) {
|
|
1172
|
-
return ['notEmpty', 'checked'
|
|
1160
|
+
return ['notEmpty', 'checked'].includes(rule.type);
|
|
1173
1161
|
}).length > 0
|
|
1174
1162
|
: false;
|
|
1175
|
-
|
|
1163
|
+
const identifier = module.get.identifier(validation, $el);
|
|
1176
1164
|
if (isRequired && !isDisabled && !hasNotEmptyRule && identifier !== undefined) {
|
|
1177
1165
|
if (isCheckbox) {
|
|
1178
1166
|
module.verbose("Adding 'checked' rule on field", identifier);
|
|
@@ -1197,7 +1185,7 @@
|
|
|
1197
1185
|
validate: {
|
|
1198
1186
|
|
|
1199
1187
|
form: function (event, ignoreCallbacks) {
|
|
1200
|
-
|
|
1188
|
+
const values = module.get.values();
|
|
1201
1189
|
|
|
1202
1190
|
// input keydown event will fire submit repeatedly by browser default
|
|
1203
1191
|
if (keyHeldDown) {
|
|
@@ -1253,10 +1241,7 @@
|
|
|
1253
1241
|
},
|
|
1254
1242
|
|
|
1255
1243
|
// takes a validation object and returns whether field passes validation
|
|
1256
|
-
field: function (field, fieldName, showErrors) {
|
|
1257
|
-
showErrors = showErrors !== undefined
|
|
1258
|
-
? showErrors
|
|
1259
|
-
: true;
|
|
1244
|
+
field: function (field, fieldName, showErrors = true) {
|
|
1260
1245
|
if (typeof field === 'string') {
|
|
1261
1246
|
module.verbose('Validating field', field);
|
|
1262
1247
|
fieldName = field;
|
|
@@ -1267,17 +1252,17 @@
|
|
|
1267
1252
|
|
|
1268
1253
|
return true;
|
|
1269
1254
|
}
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1255
|
+
const identifier = field.identifier || fieldName;
|
|
1256
|
+
const $field = module.get.field(identifier);
|
|
1257
|
+
const $fieldGroup = $field.closest($group);
|
|
1258
|
+
const $dependsField = field.depends
|
|
1274
1259
|
? module.get.field(field.depends)
|
|
1275
1260
|
: false;
|
|
1276
1261
|
let fieldValid = true;
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1262
|
+
const fieldErrors = [];
|
|
1263
|
+
const isDisabled = $field.filter(':not(:disabled)').length === 0 || $fieldGroup.hasClass(className.disabled) || $fieldGroup.parent().hasClass(className.disabled);
|
|
1264
|
+
const validationMessage = $field[0].validationMessage;
|
|
1265
|
+
const noNativeValidation = field.noNativeValidation || settings.noNativeValidation || $field.filter('[formnovalidate],[novalidate]').length > 0 || $module.filter('[novalidate]').length > 0;
|
|
1281
1266
|
let errorLimit;
|
|
1282
1267
|
if (!field.identifier) {
|
|
1283
1268
|
module.debug('Using field name as identifier', identifier);
|
|
@@ -1303,16 +1288,16 @@
|
|
|
1303
1288
|
errorLimit = field.errorLimit || settings.errorLimit;
|
|
1304
1289
|
$.each(field.rules, function (index, rule) {
|
|
1305
1290
|
if (module.has.field(identifier) && (!errorLimit || fieldErrors.length < errorLimit)) {
|
|
1306
|
-
|
|
1291
|
+
const invalidFields = module.validate.rule(field, rule, true) || [];
|
|
1307
1292
|
if (invalidFields.length > 0) {
|
|
1308
1293
|
module.debug('Field is invalid', identifier, rule.type);
|
|
1309
|
-
|
|
1294
|
+
const fieldError = module.get.prompt(rule, field);
|
|
1310
1295
|
if (!settings.inline) {
|
|
1311
1296
|
if (
|
|
1312
1297
|
// Always allow the first error prompt for new field identifiers
|
|
1313
1298
|
(!(identifier in formErrorsTracker)
|
|
1314
1299
|
// Also allow multiple error prompts per field identifier but make sure each prompt is unique
|
|
1315
|
-
|| formErrorsTracker[identifier].
|
|
1300
|
+
|| !formErrorsTracker[identifier].includes(fieldError))
|
|
1316
1301
|
// Limit the number of unique error prompts for every field identifier if specified
|
|
1317
1302
|
&& (!errorLimit || (formErrorsTracker[identifier] || []).length < errorLimit)
|
|
1318
1303
|
) {
|
|
@@ -1337,7 +1322,7 @@
|
|
|
1337
1322
|
}
|
|
1338
1323
|
} else {
|
|
1339
1324
|
if (showErrors && fieldErrors.length > 0) {
|
|
1340
|
-
formErrors = formErrors
|
|
1325
|
+
formErrors = [...formErrors, ...fieldErrors];
|
|
1341
1326
|
module.add.prompt(identifier, fieldErrors, true);
|
|
1342
1327
|
settings.onInvalid.call($field, fieldErrors);
|
|
1343
1328
|
}
|
|
@@ -1350,13 +1335,13 @@
|
|
|
1350
1335
|
|
|
1351
1336
|
// takes validation rule and returns whether field passes rule
|
|
1352
1337
|
rule: function (field, rule, internal) {
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1338
|
+
const $field = module.get.field(field.identifier);
|
|
1339
|
+
const ancillary = module.get.ancillaryValue(rule);
|
|
1340
|
+
const ruleName = module.get.ruleName(rule);
|
|
1341
|
+
const ruleFunction = settings.rules[ruleName];
|
|
1357
1342
|
let invalidFields = [];
|
|
1358
|
-
|
|
1359
|
-
|
|
1343
|
+
const isCheckbox = $field.is(selector.checkbox);
|
|
1344
|
+
const isValid = function (field) {
|
|
1360
1345
|
let value = isCheckbox ? $(field).filter(':checked').val() : $(field).val();
|
|
1361
1346
|
// cast to string avoiding encoding special values
|
|
1362
1347
|
value = value === undefined || value === '' || value === null
|
|
@@ -1406,36 +1391,36 @@
|
|
|
1406
1391
|
return module[name];
|
|
1407
1392
|
}
|
|
1408
1393
|
},
|
|
1409
|
-
debug: function () {
|
|
1394
|
+
debug: function (...args) {
|
|
1410
1395
|
if (!settings.silent && settings.debug) {
|
|
1411
1396
|
if (settings.performance) {
|
|
1412
|
-
module.performance.log(
|
|
1397
|
+
module.performance.log(args);
|
|
1413
1398
|
} else {
|
|
1414
1399
|
module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
|
|
1415
|
-
module.debug.apply(console,
|
|
1400
|
+
module.debug.apply(console, args);
|
|
1416
1401
|
}
|
|
1417
1402
|
}
|
|
1418
1403
|
},
|
|
1419
|
-
verbose: function () {
|
|
1404
|
+
verbose: function (...args) {
|
|
1420
1405
|
if (!settings.silent && settings.verbose && settings.debug) {
|
|
1421
1406
|
if (settings.performance) {
|
|
1422
|
-
module.performance.log(
|
|
1407
|
+
module.performance.log(args);
|
|
1423
1408
|
} else {
|
|
1424
1409
|
module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
|
|
1425
|
-
module.verbose.apply(console,
|
|
1410
|
+
module.verbose.apply(console, args);
|
|
1426
1411
|
}
|
|
1427
1412
|
}
|
|
1428
1413
|
},
|
|
1429
|
-
error: function () {
|
|
1414
|
+
error: function (...args) {
|
|
1430
1415
|
if (!settings.silent) {
|
|
1431
1416
|
module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
|
|
1432
|
-
module.error.apply(console,
|
|
1417
|
+
module.error.apply(console, args);
|
|
1433
1418
|
}
|
|
1434
1419
|
},
|
|
1435
|
-
warn: function () {
|
|
1420
|
+
warn: function (...args) {
|
|
1436
1421
|
if (!settings.silent) {
|
|
1437
1422
|
module.warn = Function.prototype.bind.call(console.warn, console, settings.name + ':');
|
|
1438
|
-
module.warn.apply(console,
|
|
1423
|
+
module.warn.apply(console, args);
|
|
1439
1424
|
}
|
|
1440
1425
|
},
|
|
1441
1426
|
performance: {
|
|
@@ -1450,7 +1435,7 @@
|
|
|
1450
1435
|
time = currentTime;
|
|
1451
1436
|
performance.push({
|
|
1452
1437
|
Name: message[0],
|
|
1453
|
-
Arguments:
|
|
1438
|
+
Arguments: message.slice(1),
|
|
1454
1439
|
Element: element,
|
|
1455
1440
|
'Execution Time': executionTime,
|
|
1456
1441
|
});
|
|
@@ -1474,30 +1459,22 @@
|
|
|
1474
1459
|
}
|
|
1475
1460
|
if (performance.length > 0) {
|
|
1476
1461
|
console.groupCollapsed(title);
|
|
1477
|
-
|
|
1478
|
-
console.table(performance);
|
|
1479
|
-
} else {
|
|
1480
|
-
$.each(performance, function (index, data) {
|
|
1481
|
-
console.log(data.Name + ': ' + data['Execution Time'] + 'ms');
|
|
1482
|
-
});
|
|
1483
|
-
}
|
|
1462
|
+
console.table(performance);
|
|
1484
1463
|
console.groupEnd();
|
|
1485
1464
|
}
|
|
1486
1465
|
performance = [];
|
|
1487
1466
|
},
|
|
1488
1467
|
},
|
|
1489
|
-
invoke: function (query, passedArguments, context) {
|
|
1468
|
+
invoke: function (query, passedArguments = queryArguments, context = element) {
|
|
1490
1469
|
let object = instance;
|
|
1491
1470
|
let maxDepth;
|
|
1492
1471
|
let found;
|
|
1493
1472
|
let response;
|
|
1494
|
-
passedArguments = passedArguments || queryArguments;
|
|
1495
|
-
context = context || element;
|
|
1496
1473
|
if (typeof query === 'string' && object !== undefined) {
|
|
1497
1474
|
query = query.split(/[ .]/);
|
|
1498
1475
|
maxDepth = query.length - 1;
|
|
1499
1476
|
$.each(query, function (depth, value) {
|
|
1500
|
-
|
|
1477
|
+
const camelCaseValue = depth !== maxDepth
|
|
1501
1478
|
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
|
|
1502
1479
|
: query;
|
|
1503
1480
|
if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
|
|
@@ -1613,7 +1590,6 @@
|
|
|
1613
1590
|
range: '{name} must be in a range from {min} to {max}',
|
|
1614
1591
|
maxValue: '{name} must have a maximum value of {ruleValue}',
|
|
1615
1592
|
minValue: '{name} must have a minimum value of {ruleValue}',
|
|
1616
|
-
empty: '{name} must have a value',
|
|
1617
1593
|
notEmpty: '{name} must have a value',
|
|
1618
1594
|
checked: '{name} must be checked',
|
|
1619
1595
|
email: '{name} must be a valid e-mail',
|
|
@@ -1646,7 +1622,7 @@
|
|
|
1646
1622
|
selector: {
|
|
1647
1623
|
checkbox: 'input[type="checkbox"], input[type="radio"]',
|
|
1648
1624
|
clear: '.clear',
|
|
1649
|
-
field: 'input:not(.search
|
|
1625
|
+
field: 'input:not(.search, [type="reset"], [type="button"], [type="submit"]), textarea, select',
|
|
1650
1626
|
file: 'input[type="file"]',
|
|
1651
1627
|
group: '.field',
|
|
1652
1628
|
input: 'input',
|
|
@@ -1767,7 +1743,7 @@
|
|
|
1767
1743
|
if (regExp instanceof RegExp) {
|
|
1768
1744
|
return value.match(regExp);
|
|
1769
1745
|
}
|
|
1770
|
-
|
|
1746
|
+
const regExpParts = regExp.match($.fn.form.settings.regExp.flags);
|
|
1771
1747
|
let flags;
|
|
1772
1748
|
// regular expression specified as /baz/gi (flags)
|
|
1773
1749
|
if (regExpParts) {
|
|
@@ -1801,10 +1777,10 @@
|
|
|
1801
1777
|
let min;
|
|
1802
1778
|
let max;
|
|
1803
1779
|
let parts;
|
|
1804
|
-
if (!range || ['', '..'].
|
|
1780
|
+
if (!range || ['', '..'].includes(range)) {
|
|
1805
1781
|
|
|
1806
1782
|
// do nothing
|
|
1807
|
-
} else if (range.
|
|
1783
|
+
} else if (!range.includes('..')) {
|
|
1808
1784
|
if (regExp.test(range)) {
|
|
1809
1785
|
min = range - 0;
|
|
1810
1786
|
max = min;
|
|
@@ -1926,7 +1902,7 @@
|
|
|
1926
1902
|
|
|
1927
1903
|
// matches another field
|
|
1928
1904
|
match: function (value, identifier, module) {
|
|
1929
|
-
|
|
1905
|
+
const matchingValue = module.get.value(identifier, true);
|
|
1930
1906
|
|
|
1931
1907
|
return matchingValue !== undefined
|
|
1932
1908
|
? value.toString() === matchingValue.toString()
|
|
@@ -1935,7 +1911,7 @@
|
|
|
1935
1911
|
|
|
1936
1912
|
// different from another field
|
|
1937
1913
|
different: function (value, identifier, module) {
|
|
1938
|
-
|
|
1914
|
+
const matchingValue = module.get.value(identifier, true);
|
|
1939
1915
|
|
|
1940
1916
|
return matchingValue !== undefined
|
|
1941
1917
|
? value.toString() !== matchingValue.toString()
|
|
@@ -1943,7 +1919,7 @@
|
|
|
1943
1919
|
},
|
|
1944
1920
|
|
|
1945
1921
|
creditCard: function (cardNumber, cardTypes) {
|
|
1946
|
-
|
|
1922
|
+
const cards = {
|
|
1947
1923
|
visa: {
|
|
1948
1924
|
pattern: /^4/,
|
|
1949
1925
|
length: [16],
|
|
@@ -1987,10 +1963,9 @@
|
|
|
1987
1963
|
};
|
|
1988
1964
|
let valid = {};
|
|
1989
1965
|
let validCard = false;
|
|
1990
|
-
|
|
1966
|
+
const requiredTypes = typeof cardTypes === 'string'
|
|
1991
1967
|
? cardTypes.split(',')
|
|
1992
1968
|
: false;
|
|
1993
|
-
let unionPay;
|
|
1994
1969
|
let validation;
|
|
1995
1970
|
|
|
1996
1971
|
if (typeof cardNumber !== 'string' || cardNumber.length === 0) {
|
|
@@ -2007,7 +1982,7 @@
|
|
|
2007
1982
|
validation = cards[type];
|
|
2008
1983
|
if (validation) {
|
|
2009
1984
|
valid = {
|
|
2010
|
-
length:
|
|
1985
|
+
length: validation.length.includes(cardNumber.length),
|
|
2011
1986
|
pattern: cardNumber.search(validation.pattern) !== -1,
|
|
2012
1987
|
};
|
|
2013
1988
|
if (valid.length > 0 && valid.pattern) {
|
|
@@ -2022,8 +1997,8 @@
|
|
|
2022
1997
|
}
|
|
2023
1998
|
|
|
2024
1999
|
// skip luhn for UnionPay
|
|
2025
|
-
unionPay = {
|
|
2026
|
-
number:
|
|
2000
|
+
const unionPay = {
|
|
2001
|
+
number: cards.unionPay.length.includes(cardNumber.length),
|
|
2027
2002
|
pattern: cardNumber.search(cards.unionPay.pattern) !== -1,
|
|
2028
2003
|
};
|
|
2029
2004
|
if (unionPay.number && unionPay.pattern) {
|
|
@@ -2033,13 +2008,13 @@
|
|
|
2033
2008
|
// verify luhn, adapted from <https://gist.github.com/2134376>
|
|
2034
2009
|
let length = cardNumber.length;
|
|
2035
2010
|
let multiple = 0;
|
|
2036
|
-
|
|
2011
|
+
const producedValue = [
|
|
2037
2012
|
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
|
2038
2013
|
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9],
|
|
2039
2014
|
];
|
|
2040
2015
|
let sum = 0;
|
|
2041
2016
|
while (length--) {
|
|
2042
|
-
sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];
|
|
2017
|
+
sum += producedValue[multiple][Number.parseInt(cardNumber.charAt(length), 10)];
|
|
2043
2018
|
multiple ^= 1; // eslint-disable-line no-bitwise
|
|
2044
2019
|
}
|
|
2045
2020
|
|