fomantic-ui 2.10.0-beta.62 → 2.10.0-beta.64
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 +0 -1
- package/changelog-setup.js +10 -10
- package/dist/components/accordion.css +1 -1
- package/dist/components/accordion.js +40 -41
- package/dist/components/accordion.min.css +1 -1
- package/dist/components/accordion.min.js +2 -2
- package/dist/components/ad.css +1 -1
- package/dist/components/ad.min.css +1 -1
- package/dist/components/api.js +57 -61
- package/dist/components/api.min.js +2 -2
- package/dist/components/breadcrumb.css +1 -1
- package/dist/components/breadcrumb.min.css +1 -1
- package/dist/components/button.css +1 -1
- package/dist/components/button.min.css +1 -1
- package/dist/components/calendar.css +1 -1
- package/dist/components/calendar.js +186 -187
- package/dist/components/calendar.min.css +1 -1
- package/dist/components/calendar.min.js +2 -2
- 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 +29 -30
- package/dist/components/checkbox.min.css +1 -1
- package/dist/components/checkbox.min.js +2 -2
- 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 +1 -1
- package/dist/components/dimmer.js +22 -23
- package/dist/components/dimmer.min.css +1 -1
- package/dist/components/dimmer.min.js +2 -2
- package/dist/components/divider.css +1 -1
- package/dist/components/divider.min.css +1 -1
- package/dist/components/dropdown.css +1 -1
- package/dist/components/dropdown.js +293 -337
- package/dist/components/dropdown.min.css +1 -1
- package/dist/components/dropdown.min.js +2 -2
- package/dist/components/embed.css +1 -1
- package/dist/components/embed.js +33 -35
- package/dist/components/embed.min.css +1 -1
- package/dist/components/embed.min.js +2 -2
- package/dist/components/emoji.css +1 -1
- package/dist/components/emoji.min.css +1 -1
- 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 +74 -81
- package/dist/components/flyout.min.css +1 -1
- package/dist/components/flyout.min.js +2 -2
- package/dist/components/form.css +1 -1
- package/dist/components/form.js +141 -146
- package/dist/components/form.min.css +1 -1
- package/dist/components/form.min.js +2 -2
- package/dist/components/grid.css +1 -1
- package/dist/components/grid.min.css +1 -1
- package/dist/components/header.css +1 -1
- package/dist/components/header.min.css +1 -1
- package/dist/components/icon.css +1 -1
- package/dist/components/icon.min.css +1 -1
- package/dist/components/image.css +1 -1
- package/dist/components/image.min.css +1 -1
- package/dist/components/input.css +1 -1
- package/dist/components/input.min.css +1 -1
- package/dist/components/item.css +1 -1
- package/dist/components/item.min.css +1 -1
- package/dist/components/label.css +1 -1
- package/dist/components/label.min.css +1 -1
- package/dist/components/list.css +1 -1
- package/dist/components/list.min.css +1 -1
- package/dist/components/loader.css +1 -1
- package/dist/components/loader.min.css +1 -1
- package/dist/components/menu.css +1 -1
- package/dist/components/menu.min.css +1 -1
- package/dist/components/message.css +1 -1
- package/dist/components/message.min.css +1 -1
- package/dist/components/modal.css +1 -1
- package/dist/components/modal.js +80 -81
- package/dist/components/modal.min.css +1 -1
- package/dist/components/modal.min.js +2 -2
- package/dist/components/nag.css +1 -1
- package/dist/components/nag.js +27 -28
- package/dist/components/nag.min.css +1 -1
- package/dist/components/nag.min.js +2 -2
- package/dist/components/placeholder.css +1 -1
- package/dist/components/placeholder.min.css +1 -1
- package/dist/components/popup.css +1 -1
- package/dist/components/popup.js +62 -72
- package/dist/components/popup.min.css +1 -1
- package/dist/components/popup.min.js +2 -2
- package/dist/components/progress.css +1 -1
- package/dist/components/progress.js +51 -55
- package/dist/components/progress.min.css +1 -1
- package/dist/components/progress.min.js +2 -2
- 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 +33 -34
- package/dist/components/rating.min.css +1 -1
- package/dist/components/rating.min.js +2 -2
- package/dist/components/reset.css +1 -1
- package/dist/components/reset.min.css +1 -1
- package/dist/components/reveal.css +1 -1
- package/dist/components/reveal.min.css +1 -1
- package/dist/components/search.css +1 -1
- package/dist/components/search.js +96 -109
- package/dist/components/search.min.css +1 -1
- package/dist/components/search.min.js +2 -2
- package/dist/components/segment.css +1 -1
- package/dist/components/segment.min.css +1 -1
- package/dist/components/shape.css +1 -1
- package/dist/components/shape.js +44 -45
- package/dist/components/shape.min.css +1 -1
- package/dist/components/shape.min.js +2 -2
- package/dist/components/sidebar.css +1 -1
- package/dist/components/sidebar.js +56 -64
- package/dist/components/sidebar.min.css +1 -1
- package/dist/components/sidebar.min.js +2 -2
- package/dist/components/site.css +1 -1
- package/dist/components/site.js +16 -17
- package/dist/components/site.min.css +1 -1
- package/dist/components/site.min.js +2 -2
- package/dist/components/slider.css +1 -1
- package/dist/components/slider.js +143 -148
- package/dist/components/slider.min.css +1 -1
- package/dist/components/slider.min.js +2 -2
- package/dist/components/state.js +24 -25
- package/dist/components/state.min.js +2 -2
- package/dist/components/statistic.css +1 -1
- package/dist/components/statistic.min.css +1 -1
- package/dist/components/step.css +1 -1
- package/dist/components/step.min.css +1 -1
- package/dist/components/sticky.css +1 -1
- package/dist/components/sticky.js +42 -43
- package/dist/components/sticky.min.css +1 -1
- package/dist/components/sticky.min.js +2 -2
- package/dist/components/tab.css +1 -1
- package/dist/components/tab.js +57 -66
- package/dist/components/tab.min.css +1 -1
- package/dist/components/tab.min.js +2 -2
- package/dist/components/table.css +1 -1
- package/dist/components/table.min.css +1 -1
- 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 +32 -33
- package/dist/components/toast.min.css +1 -1
- package/dist/components/toast.min.js +2 -2
- package/dist/components/transition.css +1 -1
- package/dist/components/transition.js +38 -45
- package/dist/components/transition.min.css +1 -1
- package/dist/components/transition.min.js +2 -2
- package/dist/components/visibility.js +76 -77
- package/dist/components/visibility.min.js +2 -2
- package/dist/semantic.css +53 -53
- package/dist/semantic.js +1753 -1884
- package/dist/semantic.min.css +1 -1
- package/dist/semantic.min.js +2 -2
- package/package.json +1 -1
- package/scripts/nightly-version.js +3 -3
- package/src/definitions/behaviors/api.js +56 -60
- package/src/definitions/behaviors/form.js +140 -145
- package/src/definitions/behaviors/state.js +23 -24
- package/src/definitions/behaviors/visibility.js +75 -76
- package/src/definitions/globals/site.js +15 -16
- package/src/definitions/modules/accordion.js +39 -40
- package/src/definitions/modules/calendar.js +185 -186
- package/src/definitions/modules/checkbox.js +28 -29
- package/src/definitions/modules/dimmer.js +21 -22
- package/src/definitions/modules/dropdown.js +292 -336
- package/src/definitions/modules/embed.js +32 -34
- package/src/definitions/modules/flyout.js +73 -80
- package/src/definitions/modules/modal.js +79 -80
- package/src/definitions/modules/nag.js +26 -27
- package/src/definitions/modules/popup.js +61 -71
- package/src/definitions/modules/progress.js +50 -54
- package/src/definitions/modules/rating.js +32 -33
- package/src/definitions/modules/search.js +95 -108
- package/src/definitions/modules/shape.js +43 -44
- package/src/definitions/modules/sidebar.js +55 -63
- package/src/definitions/modules/slider.js +142 -147
- package/src/definitions/modules/sticky.js +41 -42
- package/src/definitions/modules/tab.js +56 -65
- package/src/definitions/modules/toast.js +31 -32
- package/src/definitions/modules/transition.js +37 -44
- package/tasks/admin/components/create.js +11 -11
- package/tasks/admin/components/init.js +11 -12
- package/tasks/admin/components/update.js +19 -20
- package/tasks/admin/distributions/create.js +24 -36
- 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 +1 -1
- 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 +6 -6
- package/tasks/config/project/install.js +12 -12
- package/tasks/config/project/release.js +5 -11
- package/tasks/config/tasks.js +5 -5
- package/tasks/config/user.js +1 -4
- package/tasks/docs/metadata.js +11 -12
- package/tasks/install.js +9 -9
- package/test/meteor/assets.js +1 -1
- package/test/modules/module.spec.js +18 -18
|
@@ -20,19 +20,19 @@
|
|
|
20
20
|
: globalThis;
|
|
21
21
|
|
|
22
22
|
$.fn.form = function (...args) {
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
@@ -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
|
|
|
@@ -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
|
}
|
|
@@ -280,11 +279,10 @@
|
|
|
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 () {
|
|
@@ -495,7 +493,7 @@
|
|
|
495
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;
|
|
@@ -518,16 +516,16 @@
|
|
|
518
516
|
return validation.identifier || $el.attr('id') || $el.attr('name') || $el.data(metadata.validate);
|
|
519
517
|
},
|
|
520
518
|
prompt: function (rule, field) {
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
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;
|
|
526
524
|
let prompt = String(isFunction(promptCheck)
|
|
527
525
|
? promptCheck.call($field[0], value)
|
|
528
526
|
: promptCheck);
|
|
529
|
-
|
|
530
|
-
|
|
527
|
+
const requiresValue = prompt.search('{value}') !== -1;
|
|
528
|
+
const requiresName = prompt.search('{name}') !== -1;
|
|
531
529
|
let parts;
|
|
532
530
|
let suffixPrompt;
|
|
533
531
|
if (ancillary && ['integer', 'decimal', 'number', 'size'].includes(ruleName) && ancillary.includes('..')) {
|
|
@@ -624,10 +622,10 @@
|
|
|
624
622
|
return $fields;
|
|
625
623
|
},
|
|
626
624
|
fieldLabel: function (identifier, useIdAsFallback) {
|
|
627
|
-
|
|
625
|
+
const $field = typeof identifier === 'string'
|
|
628
626
|
? module.get.field(identifier)
|
|
629
627
|
: identifier;
|
|
630
|
-
|
|
628
|
+
const $label = $field.closest(selector.group).find('label:not(:empty)').eq(0);
|
|
631
629
|
|
|
632
630
|
return $label.length === 1
|
|
633
631
|
? $label.text()
|
|
@@ -654,30 +652,28 @@
|
|
|
654
652
|
return fieldValidation || false;
|
|
655
653
|
},
|
|
656
654
|
value: function (field, strict) {
|
|
657
|
-
|
|
658
|
-
let results;
|
|
659
|
-
let resultKeys;
|
|
655
|
+
const fields = [];
|
|
660
656
|
fields.push(field);
|
|
661
|
-
results = module.get.values.call(element, fields, strict);
|
|
662
|
-
resultKeys = Object.keys(results);
|
|
657
|
+
const results = module.get.values.call(element, fields, strict);
|
|
658
|
+
const resultKeys = Object.keys(results);
|
|
663
659
|
|
|
664
660
|
return resultKeys.length > 0 ? results[resultKeys[0]] : undefined;
|
|
665
661
|
},
|
|
666
662
|
values: function (fields, strict) {
|
|
667
|
-
|
|
663
|
+
const $fields = Array.isArray(fields) && fields.length > 0
|
|
668
664
|
? module.get.fields(fields, strict)
|
|
669
665
|
: $field;
|
|
670
|
-
|
|
666
|
+
const values = {};
|
|
671
667
|
$fields.each(function (index, field) {
|
|
672
|
-
|
|
673
|
-
|
|
668
|
+
const $field = $(field);
|
|
669
|
+
const $calendar = $field.closest(selector.uiCalendar);
|
|
674
670
|
let name = $field.prop('name') || $field.prop('id');
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
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
|
|
681
677
|
? $field.is(':checked')
|
|
682
678
|
: false;
|
|
683
679
|
if (name) {
|
|
@@ -704,7 +700,7 @@
|
|
|
704
700
|
} else if (isCheckbox) {
|
|
705
701
|
values[name] = isChecked ? value || true : false;
|
|
706
702
|
} else if (isCalendar) {
|
|
707
|
-
|
|
703
|
+
const date = $calendar.calendar('get date');
|
|
708
704
|
|
|
709
705
|
if (date !== null) {
|
|
710
706
|
switch (settings.dateHandling) {
|
|
@@ -719,7 +715,7 @@
|
|
|
719
715
|
break;
|
|
720
716
|
}
|
|
721
717
|
case 'formatter': {
|
|
722
|
-
|
|
718
|
+
const type = $calendar.calendar('setting', 'type');
|
|
723
719
|
|
|
724
720
|
switch (type) {
|
|
725
721
|
case 'date': {
|
|
@@ -824,7 +820,7 @@
|
|
|
824
820
|
rules: [],
|
|
825
821
|
};
|
|
826
822
|
}
|
|
827
|
-
|
|
823
|
+
const newValidation = {
|
|
828
824
|
rules: [],
|
|
829
825
|
};
|
|
830
826
|
if (module.is.shorthandRules(rules)) {
|
|
@@ -857,11 +853,11 @@
|
|
|
857
853
|
if (errors === false) {
|
|
858
854
|
return;
|
|
859
855
|
}
|
|
860
|
-
|
|
861
|
-
|
|
856
|
+
const $field = module.get.field(identifier);
|
|
857
|
+
const $fieldGroup = $field.closest($group);
|
|
862
858
|
let $prompt = $fieldGroup.children(selector.prompt);
|
|
863
859
|
let promptExists = $prompt.length > 0;
|
|
864
|
-
|
|
860
|
+
const canTransition = settings.transition && module.can.useElement('transition');
|
|
865
861
|
module.verbose('Adding field error state', identifier);
|
|
866
862
|
if (!internal) {
|
|
867
863
|
$fieldGroup
|
|
@@ -952,7 +948,7 @@
|
|
|
952
948
|
module.determine.isDirty();
|
|
953
949
|
},
|
|
954
950
|
rule: function (field, rule) {
|
|
955
|
-
|
|
951
|
+
const rules = Array.isArray(rule)
|
|
956
952
|
? rule
|
|
957
953
|
: [rule];
|
|
958
954
|
if (validation[field] === undefined || !Array.isArray(validation[field].rules)) {
|
|
@@ -976,7 +972,7 @@
|
|
|
976
972
|
});
|
|
977
973
|
},
|
|
978
974
|
field: function (field) {
|
|
979
|
-
|
|
975
|
+
const fields = Array.isArray(field)
|
|
980
976
|
? field
|
|
981
977
|
: [field];
|
|
982
978
|
$.each(fields, function (index, field) {
|
|
@@ -998,9 +994,9 @@
|
|
|
998
994
|
module.remove.field(fields);
|
|
999
995
|
},
|
|
1000
996
|
prompt: function (identifier) {
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
997
|
+
const $field = module.get.field(identifier);
|
|
998
|
+
const $fieldGroup = $field.closest($group);
|
|
999
|
+
const $prompt = $fieldGroup.children(selector.prompt);
|
|
1004
1000
|
$fieldGroup
|
|
1005
1001
|
.removeClass(className.error);
|
|
1006
1002
|
if (settings.inline && $prompt.is(':visible')) {
|
|
@@ -1027,13 +1023,13 @@
|
|
|
1027
1023
|
},
|
|
1028
1024
|
defaults: function () {
|
|
1029
1025
|
$field.each(function (index, el) {
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
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
|
|
1037
1033
|
? $el.is(':checked')
|
|
1038
1034
|
: $el.val();
|
|
1039
1035
|
if (isDropdown) {
|
|
@@ -1055,7 +1051,7 @@
|
|
|
1055
1051
|
.addClass(className.error);
|
|
1056
1052
|
},
|
|
1057
1053
|
value: function (field, value) {
|
|
1058
|
-
|
|
1054
|
+
const fields = {};
|
|
1059
1055
|
fields[field] = value;
|
|
1060
1056
|
|
|
1061
1057
|
return module.set.values.call(element, fields);
|
|
@@ -1065,16 +1061,16 @@
|
|
|
1065
1061
|
return;
|
|
1066
1062
|
}
|
|
1067
1063
|
$.each(fields, function (key, value) {
|
|
1068
|
-
|
|
1064
|
+
const $field = module.get.field(key);
|
|
1069
1065
|
let $element = $field.parent();
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
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;
|
|
1078
1074
|
let $multipleField;
|
|
1079
1075
|
if (fieldExists) {
|
|
1080
1076
|
if (isMultiple && isCheckbox) {
|
|
@@ -1153,18 +1149,18 @@
|
|
|
1153
1149
|
});
|
|
1154
1150
|
}
|
|
1155
1151
|
$field.each(function (_index, el) {
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
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
|
|
1163
1159
|
? $.grep(validation.rules, function (rule) {
|
|
1164
1160
|
return ['notEmpty', 'checked'].includes(rule.type);
|
|
1165
1161
|
}).length > 0
|
|
1166
1162
|
: false;
|
|
1167
|
-
|
|
1163
|
+
const identifier = module.get.identifier(validation, $el);
|
|
1168
1164
|
if (isRequired && !isDisabled && !hasNotEmptyRule && identifier !== undefined) {
|
|
1169
1165
|
if (isCheckbox) {
|
|
1170
1166
|
module.verbose("Adding 'checked' rule on field", identifier);
|
|
@@ -1189,7 +1185,7 @@
|
|
|
1189
1185
|
validate: {
|
|
1190
1186
|
|
|
1191
1187
|
form: function (event, ignoreCallbacks) {
|
|
1192
|
-
|
|
1188
|
+
const values = module.get.values();
|
|
1193
1189
|
|
|
1194
1190
|
// input keydown event will fire submit repeatedly by browser default
|
|
1195
1191
|
if (keyHeldDown) {
|
|
@@ -1256,17 +1252,17 @@
|
|
|
1256
1252
|
|
|
1257
1253
|
return true;
|
|
1258
1254
|
}
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1255
|
+
const identifier = field.identifier || fieldName;
|
|
1256
|
+
const $field = module.get.field(identifier);
|
|
1257
|
+
const $fieldGroup = $field.closest($group);
|
|
1258
|
+
const $dependsField = field.depends
|
|
1263
1259
|
? module.get.field(field.depends)
|
|
1264
1260
|
: false;
|
|
1265
1261
|
let fieldValid = true;
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
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;
|
|
1270
1266
|
let errorLimit;
|
|
1271
1267
|
if (!field.identifier) {
|
|
1272
1268
|
module.debug('Using field name as identifier', identifier);
|
|
@@ -1292,10 +1288,10 @@
|
|
|
1292
1288
|
errorLimit = field.errorLimit || settings.errorLimit;
|
|
1293
1289
|
$.each(field.rules, function (index, rule) {
|
|
1294
1290
|
if (module.has.field(identifier) && (!errorLimit || fieldErrors.length < errorLimit)) {
|
|
1295
|
-
|
|
1291
|
+
const invalidFields = module.validate.rule(field, rule, true) || [];
|
|
1296
1292
|
if (invalidFields.length > 0) {
|
|
1297
1293
|
module.debug('Field is invalid', identifier, rule.type);
|
|
1298
|
-
|
|
1294
|
+
const fieldError = module.get.prompt(rule, field);
|
|
1299
1295
|
if (!settings.inline) {
|
|
1300
1296
|
if (
|
|
1301
1297
|
// Always allow the first error prompt for new field identifiers
|
|
@@ -1339,13 +1335,13 @@
|
|
|
1339
1335
|
|
|
1340
1336
|
// takes validation rule and returns whether field passes rule
|
|
1341
1337
|
rule: function (field, rule, internal) {
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
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];
|
|
1346
1342
|
let invalidFields = [];
|
|
1347
|
-
|
|
1348
|
-
|
|
1343
|
+
const isCheckbox = $field.is(selector.checkbox);
|
|
1344
|
+
const isValid = function (field) {
|
|
1349
1345
|
let value = isCheckbox ? $(field).filter(':checked').val() : $(field).val();
|
|
1350
1346
|
// cast to string avoiding encoding special values
|
|
1351
1347
|
value = value === undefined || value === '' || value === null
|
|
@@ -1478,7 +1474,7 @@
|
|
|
1478
1474
|
query = query.split(/[ .]/);
|
|
1479
1475
|
maxDepth = query.length - 1;
|
|
1480
1476
|
$.each(query, function (depth, value) {
|
|
1481
|
-
|
|
1477
|
+
const camelCaseValue = depth !== maxDepth
|
|
1482
1478
|
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
|
|
1483
1479
|
: query;
|
|
1484
1480
|
if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
|
|
@@ -1747,7 +1743,7 @@
|
|
|
1747
1743
|
if (regExp instanceof RegExp) {
|
|
1748
1744
|
return value.match(regExp);
|
|
1749
1745
|
}
|
|
1750
|
-
|
|
1746
|
+
const regExpParts = regExp.match($.fn.form.settings.regExp.flags);
|
|
1751
1747
|
let flags;
|
|
1752
1748
|
// regular expression specified as /baz/gi (flags)
|
|
1753
1749
|
if (regExpParts) {
|
|
@@ -1906,7 +1902,7 @@
|
|
|
1906
1902
|
|
|
1907
1903
|
// matches another field
|
|
1908
1904
|
match: function (value, identifier, module) {
|
|
1909
|
-
|
|
1905
|
+
const matchingValue = module.get.value(identifier, true);
|
|
1910
1906
|
|
|
1911
1907
|
return matchingValue !== undefined
|
|
1912
1908
|
? value.toString() === matchingValue.toString()
|
|
@@ -1915,7 +1911,7 @@
|
|
|
1915
1911
|
|
|
1916
1912
|
// different from another field
|
|
1917
1913
|
different: function (value, identifier, module) {
|
|
1918
|
-
|
|
1914
|
+
const matchingValue = module.get.value(identifier, true);
|
|
1919
1915
|
|
|
1920
1916
|
return matchingValue !== undefined
|
|
1921
1917
|
? value.toString() !== matchingValue.toString()
|
|
@@ -1923,7 +1919,7 @@
|
|
|
1923
1919
|
},
|
|
1924
1920
|
|
|
1925
1921
|
creditCard: function (cardNumber, cardTypes) {
|
|
1926
|
-
|
|
1922
|
+
const cards = {
|
|
1927
1923
|
visa: {
|
|
1928
1924
|
pattern: /^4/,
|
|
1929
1925
|
length: [16],
|
|
@@ -1967,10 +1963,9 @@
|
|
|
1967
1963
|
};
|
|
1968
1964
|
let valid = {};
|
|
1969
1965
|
let validCard = false;
|
|
1970
|
-
|
|
1966
|
+
const requiredTypes = typeof cardTypes === 'string'
|
|
1971
1967
|
? cardTypes.split(',')
|
|
1972
1968
|
: false;
|
|
1973
|
-
let unionPay;
|
|
1974
1969
|
let validation;
|
|
1975
1970
|
|
|
1976
1971
|
if (typeof cardNumber !== 'string' || cardNumber.length === 0) {
|
|
@@ -2002,7 +1997,7 @@
|
|
|
2002
1997
|
}
|
|
2003
1998
|
|
|
2004
1999
|
// skip luhn for UnionPay
|
|
2005
|
-
unionPay = {
|
|
2000
|
+
const unionPay = {
|
|
2006
2001
|
number: cards.unionPay.length.includes(cardNumber.length),
|
|
2007
2002
|
pattern: cardNumber.search(cards.unionPay.pattern) !== -1,
|
|
2008
2003
|
};
|
|
@@ -2013,7 +2008,7 @@
|
|
|
2013
2008
|
// verify luhn, adapted from <https://gist.github.com/2134376>
|
|
2014
2009
|
let length = cardNumber.length;
|
|
2015
2010
|
let multiple = 0;
|
|
2016
|
-
|
|
2011
|
+
const producedValue = [
|
|
2017
2012
|
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
|
2018
2013
|
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9],
|
|
2019
2014
|
];
|