fomantic-ui 2.10.0-beta.1 → 2.10.0-beta.10

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.
Files changed (287) hide show
  1. package/.all-contributorsrc +9 -0
  2. package/.eslintrc.js +0 -10
  3. package/CONTRIBUTING.md +4 -1
  4. package/CONTRIBUTORS.md +1 -0
  5. package/FAQ.md +7 -2
  6. package/README.md +5 -9
  7. package/ROADMAP.md +4 -4
  8. package/SECURITY.md +8 -7
  9. package/changelog-setup.js +64 -70
  10. package/dist/components/accordion.css +1 -1
  11. package/dist/components/accordion.js +103 -142
  12. package/dist/components/accordion.min.css +1 -1
  13. package/dist/components/accordion.min.js +2 -2
  14. package/dist/components/ad.css +1 -1
  15. package/dist/components/ad.min.css +1 -1
  16. package/dist/components/api.js +157 -210
  17. package/dist/components/api.min.js +2 -2
  18. package/dist/components/breadcrumb.css +1 -1
  19. package/dist/components/breadcrumb.min.css +1 -1
  20. package/dist/components/button.css +1 -2
  21. package/dist/components/button.min.css +2 -2
  22. package/dist/components/calendar.css +1 -2
  23. package/dist/components/calendar.js +314 -352
  24. package/dist/components/calendar.min.css +2 -2
  25. package/dist/components/calendar.min.js +2 -2
  26. package/dist/components/card.css +1 -1
  27. package/dist/components/card.min.css +1 -1
  28. package/dist/components/checkbox.css +1 -2
  29. package/dist/components/checkbox.js +85 -135
  30. package/dist/components/checkbox.min.css +2 -2
  31. package/dist/components/checkbox.min.js +2 -2
  32. package/dist/components/comment.css +1 -1
  33. package/dist/components/comment.min.css +1 -1
  34. package/dist/components/container.css +2 -4
  35. package/dist/components/container.min.css +2 -2
  36. package/dist/components/dimmer.css +1 -11
  37. package/dist/components/dimmer.js +61 -94
  38. package/dist/components/dimmer.min.css +2 -2
  39. package/dist/components/dimmer.min.js +2 -2
  40. package/dist/components/divider.css +1 -2
  41. package/dist/components/divider.min.css +2 -2
  42. package/dist/components/dropdown.css +30 -51
  43. package/dist/components/dropdown.js +736 -1055
  44. package/dist/components/dropdown.min.css +2 -2
  45. package/dist/components/dropdown.min.js +2 -2
  46. package/dist/components/embed.css +1 -1
  47. package/dist/components/embed.js +85 -114
  48. package/dist/components/embed.min.css +1 -1
  49. package/dist/components/embed.min.js +2 -2
  50. package/dist/components/emoji.css +3809 -7617
  51. package/dist/components/emoji.min.css +2 -2
  52. package/dist/components/feed.css +1 -1
  53. package/dist/components/feed.min.css +1 -1
  54. package/dist/components/flag.css +1 -1
  55. package/dist/components/flag.min.css +1 -1
  56. package/dist/components/flyout.css +2 -3
  57. package/dist/components/flyout.js +226 -355
  58. package/dist/components/flyout.min.css +2 -2
  59. package/dist/components/flyout.min.js +2 -2
  60. package/dist/components/form.css +5 -95
  61. package/dist/components/form.js +335 -444
  62. package/dist/components/form.min.css +2 -2
  63. package/dist/components/form.min.js +2 -2
  64. package/dist/components/grid.css +2 -58
  65. package/dist/components/grid.min.css +2 -2
  66. package/dist/components/header.css +1 -1
  67. package/dist/components/header.min.css +1 -1
  68. package/dist/components/icon.css +4 -4
  69. package/dist/components/icon.min.css +2 -2
  70. package/dist/components/image.css +1 -1
  71. package/dist/components/image.min.css +1 -1
  72. package/dist/components/input.css +1 -536
  73. package/dist/components/input.min.css +2 -2
  74. package/dist/components/item.css +1 -1
  75. package/dist/components/item.min.css +1 -1
  76. package/dist/components/label.css +1 -1
  77. package/dist/components/label.min.css +1 -1
  78. package/dist/components/list.css +1 -3
  79. package/dist/components/list.min.css +2 -2
  80. package/dist/components/loader.css +1 -1
  81. package/dist/components/loader.min.css +1 -1
  82. package/dist/components/menu.css +1 -9
  83. package/dist/components/menu.min.css +2 -2
  84. package/dist/components/message.css +1 -1
  85. package/dist/components/message.min.css +1 -1
  86. package/dist/components/modal.css +5 -9
  87. package/dist/components/modal.js +261 -384
  88. package/dist/components/modal.min.css +2 -2
  89. package/dist/components/modal.min.js +2 -2
  90. package/dist/components/nag.css +1 -1
  91. package/dist/components/nag.js +68 -98
  92. package/dist/components/nag.min.css +1 -1
  93. package/dist/components/nag.min.js +2 -2
  94. package/dist/components/placeholder.css +1 -1
  95. package/dist/components/placeholder.min.css +1 -1
  96. package/dist/components/popup.css +1 -2
  97. package/dist/components/popup.js +198 -271
  98. package/dist/components/popup.min.css +2 -2
  99. package/dist/components/popup.min.js +2 -2
  100. package/dist/components/progress.css +1 -1
  101. package/dist/components/progress.js +109 -144
  102. package/dist/components/progress.min.css +1 -1
  103. package/dist/components/progress.min.js +2 -2
  104. package/dist/components/rail.css +1 -1
  105. package/dist/components/rail.min.css +1 -1
  106. package/dist/components/rating.css +1 -1
  107. package/dist/components/rating.js +91 -123
  108. package/dist/components/rating.min.css +1 -1
  109. package/dist/components/rating.min.js +2 -2
  110. package/dist/components/reset.css +1 -1
  111. package/dist/components/reset.min.css +1 -1
  112. package/dist/components/reveal.css +1 -1
  113. package/dist/components/reveal.min.css +1 -1
  114. package/dist/components/search.css +2 -9
  115. package/dist/components/search.js +277 -379
  116. package/dist/components/search.min.css +2 -2
  117. package/dist/components/search.min.js +2 -2
  118. package/dist/components/segment.css +2 -7
  119. package/dist/components/segment.min.css +2 -2
  120. package/dist/components/shape.css +1 -2
  121. package/dist/components/shape.js +158 -224
  122. package/dist/components/shape.min.css +2 -2
  123. package/dist/components/shape.min.js +2 -2
  124. package/dist/components/sidebar.css +2 -3
  125. package/dist/components/sidebar.js +124 -206
  126. package/dist/components/sidebar.min.css +2 -2
  127. package/dist/components/sidebar.min.js +2 -2
  128. package/dist/components/site.css +9 -25
  129. package/dist/components/site.js +38 -57
  130. package/dist/components/site.min.css +2 -2
  131. package/dist/components/site.min.js +2 -2
  132. package/dist/components/slider.css +1 -1
  133. package/dist/components/slider.js +246 -329
  134. package/dist/components/slider.min.css +1 -1
  135. package/dist/components/slider.min.js +2 -2
  136. package/dist/components/state.js +70 -100
  137. package/dist/components/state.min.js +2 -2
  138. package/dist/components/statistic.css +1 -1
  139. package/dist/components/statistic.min.css +1 -1
  140. package/dist/components/step.css +1 -1
  141. package/dist/components/step.min.css +1 -1
  142. package/dist/components/sticky.css +1 -1
  143. package/dist/components/sticky.js +135 -180
  144. package/dist/components/sticky.min.css +1 -1
  145. package/dist/components/sticky.min.js +2 -2
  146. package/dist/components/tab.css +1 -1
  147. package/dist/components/tab.js +176 -244
  148. package/dist/components/tab.min.css +1 -1
  149. package/dist/components/tab.min.js +2 -2
  150. package/dist/components/table.css +3 -37
  151. package/dist/components/table.min.css +2 -2
  152. package/dist/components/text.css +1 -1
  153. package/dist/components/text.min.css +1 -1
  154. package/dist/components/toast.css +1 -3
  155. package/dist/components/toast.js +109 -147
  156. package/dist/components/toast.min.css +1 -1
  157. package/dist/components/toast.min.js +2 -2
  158. package/dist/components/transition.css +1 -1
  159. package/dist/components/transition.js +91 -146
  160. package/dist/components/transition.min.css +1 -1
  161. package/dist/components/transition.min.js +2 -2
  162. package/dist/components/visibility.js +146 -224
  163. package/dist/components/visibility.min.js +2 -2
  164. package/dist/semantic.css +3906 -8720
  165. package/dist/semantic.js +4397 -6155
  166. package/dist/semantic.min.css +2 -2
  167. package/dist/semantic.min.js +2 -2
  168. package/examples/assets/show-examples.js +2 -4
  169. package/gulpfile.js +5 -7
  170. package/package.json +3 -5
  171. package/scripts/nightly-version.js +7 -10
  172. package/src/README.md +3 -3
  173. package/src/definitions/behaviors/api.js +156 -209
  174. package/src/definitions/behaviors/form.js +334 -443
  175. package/src/definitions/behaviors/state.js +69 -99
  176. package/src/definitions/behaviors/visibility.js +145 -223
  177. package/src/definitions/collections/form.less +1 -13
  178. package/src/definitions/collections/grid.less +1 -61
  179. package/src/definitions/collections/menu.less +0 -11
  180. package/src/definitions/collections/table.less +1 -35
  181. package/src/definitions/elements/input.less +1 -61
  182. package/src/definitions/elements/segment.less +0 -6
  183. package/src/definitions/globals/site.js +37 -56
  184. package/src/definitions/globals/site.less +2 -18
  185. package/src/definitions/modules/accordion.js +102 -141
  186. package/src/definitions/modules/calendar.js +313 -351
  187. package/src/definitions/modules/checkbox.js +84 -134
  188. package/src/definitions/modules/dimmer.js +60 -93
  189. package/src/definitions/modules/dimmer.less +0 -9
  190. package/src/definitions/modules/dropdown.js +735 -1054
  191. package/src/definitions/modules/dropdown.less +31 -47
  192. package/src/definitions/modules/embed.js +84 -113
  193. package/src/definitions/modules/flyout.js +225 -354
  194. package/src/definitions/modules/modal.js +260 -383
  195. package/src/definitions/modules/modal.less +1 -1
  196. package/src/definitions/modules/nag.js +67 -97
  197. package/src/definitions/modules/popup.js +197 -270
  198. package/src/definitions/modules/progress.js +108 -143
  199. package/src/definitions/modules/rating.js +90 -122
  200. package/src/definitions/modules/search.js +276 -378
  201. package/src/definitions/modules/search.less +0 -3
  202. package/src/definitions/modules/shape.js +157 -223
  203. package/src/definitions/modules/sidebar.js +123 -205
  204. package/src/definitions/modules/slider.js +245 -328
  205. package/src/definitions/modules/slider.less +1 -1
  206. package/src/definitions/modules/sticky.js +134 -179
  207. package/src/definitions/modules/tab.js +175 -243
  208. package/src/definitions/modules/toast.js +108 -146
  209. package/src/definitions/modules/toast.less +1 -1
  210. package/src/definitions/modules/transition.js +90 -145
  211. package/src/theme.less +0 -13
  212. package/src/themes/basic/elements/icon.variables +1 -1
  213. package/src/themes/default/collections/grid.variables +0 -30
  214. package/src/themes/default/collections/table.variables +1 -5
  215. package/src/themes/default/elements/icon.variables +3 -3
  216. package/src/themes/default/globals/site.variables +8 -15
  217. package/src/themes/default/globals/variation.variables +1 -2
  218. package/src/themes/default/modules/dropdown.variables +1 -0
  219. package/src/themes/default/modules/slider.variables +1 -1
  220. package/src/themes/github/elements/icon.variables +1 -1
  221. package/src/themes/material/elements/icon.variables +1 -1
  222. package/tasks/README.md +1 -1
  223. package/tasks/admin/components/create.js +89 -122
  224. package/tasks/admin/components/init.js +34 -65
  225. package/tasks/admin/components/update.js +50 -61
  226. package/tasks/admin/distributions/create.js +71 -111
  227. package/tasks/admin/distributions/init.js +32 -63
  228. package/tasks/admin/distributions/update.js +49 -57
  229. package/tasks/admin/publish.js +1 -1
  230. package/tasks/admin/register.js +14 -19
  231. package/tasks/admin/release.js +2 -2
  232. package/tasks/build/assets.js +14 -18
  233. package/tasks/build/css.js +59 -68
  234. package/tasks/build/javascript.js +48 -56
  235. package/tasks/build.js +4 -6
  236. package/tasks/check-install.js +5 -8
  237. package/tasks/clean.js +5 -7
  238. package/tasks/collections/admin.js +14 -16
  239. package/tasks/collections/build.js +6 -8
  240. package/tasks/collections/docs.js +4 -6
  241. package/tasks/collections/install.js +2 -4
  242. package/tasks/collections/rtl.js +2 -4
  243. package/tasks/collections/various.js +2 -4
  244. package/tasks/config/admin/github.js +9 -19
  245. package/tasks/config/admin/templates/README.md +2 -2
  246. package/tasks/config/admin/templates/bower.json +2 -4
  247. package/tasks/config/admin/templates/composer.json +1 -1
  248. package/tasks/config/admin/templates/css-package.js +1 -4
  249. package/tasks/config/admin/templates/less-package.js +1 -3
  250. package/tasks/config/defaults.js +0 -1
  251. package/tasks/config/npm/gulpfile.js +4 -6
  252. package/tasks/config/project/config.js +27 -35
  253. package/tasks/config/project/install.js +64 -82
  254. package/tasks/config/project/release.js +7 -9
  255. package/tasks/config/tasks.js +10 -21
  256. package/tasks/config/user.js +14 -20
  257. package/tasks/docs/build.js +26 -31
  258. package/tasks/docs/metadata.js +30 -39
  259. package/tasks/docs/serve.js +23 -27
  260. package/tasks/install.js +94 -128
  261. package/tasks/rtl/build.js +2 -4
  262. package/tasks/rtl/watch.js +3 -5
  263. package/tasks/watch.js +13 -13
  264. package/test/meteor/fonts.js +1 -2
  265. package/test/modules/module.spec.js +16 -18
  266. package/types/fomantic-ui-calendar.d.ts +1 -1
  267. package/types/fomantic-ui-dropdown.d.ts +45 -1
  268. package/types/fomantic-ui-embed.d.ts +1 -1
  269. package/types/fomantic-ui-flyout.d.ts +1 -1
  270. package/types/fomantic-ui-form.d.ts +0 -7
  271. package/types/fomantic-ui-modal.d.ts +1 -1
  272. package/types/fomantic-ui-search.d.ts +12 -6
  273. package/types/fomantic-ui-toast.d.ts +1 -1
  274. package/src/themes/basic/assets/fonts/icons.woff +0 -0
  275. package/src/themes/default/assets/fonts/Lato-Bold.woff +0 -0
  276. package/src/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
  277. package/src/themes/default/assets/fonts/Lato-Italic.woff +0 -0
  278. package/src/themes/default/assets/fonts/Lato-Regular.woff +0 -0
  279. package/src/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  280. package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
  281. package/src/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
  282. package/src/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  283. package/src/themes/default/assets/fonts/brand-icons.woff +0 -0
  284. package/src/themes/default/assets/fonts/icons.woff +0 -0
  285. package/src/themes/default/assets/fonts/outline-icons.woff +0 -0
  286. package/src/themes/github/assets/fonts/octicons.woff +0 -0
  287. package/src/themes/material/assets/fonts/icons.woff +0 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * # Fomantic-UI 2.10.0-beta.1+bee406e - Form Validation
2
+ * # Fomantic-UI 2.10.0-beta.10+3ca268e - Form Validation
3
3
  * https://github.com/fomantic/Fomantic-UI/
4
4
  *
5
5
  *
@@ -20,58 +20,54 @@
20
20
  : globalThis;
21
21
 
22
22
  $.fn.form = function (parameters) {
23
- var
24
- $allModules = $(this),
25
- $window = $(window),
26
-
27
- time = Date.now(),
28
- performance = [],
29
-
30
- query = arguments[0],
31
- methodInvoked = typeof query === 'string',
32
- queryArguments = [].slice.call(arguments, 1),
33
- returnedValue
34
- ;
23
+ let $allModules = $(this);
24
+ let $window = $(window);
25
+
26
+ let time = Date.now();
27
+ let performance = [];
28
+
29
+ let query = arguments[0];
30
+ let methodInvoked = typeof query === 'string';
31
+ let queryArguments = [].slice.call(arguments, 1);
32
+ let returnedValue;
35
33
  $allModules.each(function () {
36
- var
37
- $module = $(this),
38
- element = this,
39
-
40
- formErrors = [],
41
- formErrorsTracker = {},
42
- keyHeldDown = false,
43
-
44
- // set at run-time
45
- $field,
46
- $group,
47
- $message,
48
- $prompt,
49
- $submit,
50
- $clear,
51
- $reset,
52
-
53
- settings,
54
- validation,
55
-
56
- metadata,
57
- selector,
58
- className,
59
- regExp,
60
- error,
61
-
62
- namespace,
63
- moduleNamespace,
64
- eventNamespace,
65
- attachEventsSelector,
66
- attachEventsAction,
67
-
68
- submitting = false,
69
- dirty = false,
70
- history = ['clean', 'clean'],
71
-
72
- instance,
73
- module
74
- ;
34
+ let $module = $(this);
35
+ let element = this;
36
+
37
+ let formErrors = [];
38
+ let formErrorsTracker = {};
39
+ let keyHeldDown = false;
40
+
41
+ // set at run-time
42
+ let $field;
43
+ let $group;
44
+ let $message;
45
+ let $prompt;
46
+ let $submit;
47
+ let $clear;
48
+ let $reset;
49
+
50
+ let settings;
51
+ let validation;
52
+
53
+ let metadata;
54
+ let selector;
55
+ let className;
56
+ let regExp;
57
+ let error;
58
+
59
+ let namespace;
60
+ let moduleNamespace;
61
+ let eventNamespace;
62
+ let attachEventsSelector;
63
+ let attachEventsAction;
64
+
65
+ let submitting = false;
66
+ let dirty = false;
67
+ let history = ['clean', 'clean'];
68
+
69
+ let instance;
70
+ let module;
75
71
 
76
72
  module = {
77
73
 
@@ -103,16 +99,14 @@
103
99
  module.verbose('Storing instance of module', module);
104
100
  instance = module;
105
101
  $module
106
- .data(moduleNamespace, module)
107
- ;
102
+ .data(moduleNamespace, module);
108
103
  },
109
104
 
110
105
  destroy: function () {
111
106
  module.verbose('Destroying previous module', instance);
112
107
  module.removeEvents();
113
108
  $module
114
- .removeData(moduleNamespace)
115
- ;
109
+ .removeData(moduleNamespace);
116
110
  },
117
111
 
118
112
  refresh: function () {
@@ -162,18 +156,15 @@
162
156
  .on('blur' + eventNamespace, selector.field, module.event.field.blur)
163
157
  .on('click' + eventNamespace, selector.submit, module.submit)
164
158
  .on('click' + eventNamespace, selector.reset, module.reset)
165
- .on('click' + eventNamespace, selector.clear, module.clear)
166
- ;
159
+ .on('click' + eventNamespace, selector.clear, module.clear);
167
160
  $field.on('invalid' + eventNamespace, module.event.field.invalid);
168
161
  if (settings.keyboardShortcuts) {
169
162
  $module.on('keydown' + eventNamespace, selector.field, module.event.field.keydown);
170
163
  }
171
164
  $field.each(function (index, el) {
172
- var
173
- $input = $(el),
174
- type = $input.prop('type'),
175
- inputEvent = module.get.changeEvent(type, $input)
176
- ;
165
+ let $input = $(el);
166
+ let type = $input.prop('type');
167
+ let inputEvent = module.get.changeEvent(type, $input);
177
168
  $input.on(inputEvent + eventNamespace, module.event.field.change);
178
169
  });
179
170
 
@@ -204,18 +195,16 @@
204
195
 
205
196
  clear: function () {
206
197
  $field.each(function (index, el) {
207
- var
208
- $field = $(el),
209
- $element = $field.parent(),
210
- $fieldGroup = $field.closest($group),
211
- $prompt = $fieldGroup.find(selector.prompt),
212
- $calendar = $field.closest(selector.uiCalendar),
213
- defaultValue = $field.data(metadata.defaultValue) || '',
214
- isCheckbox = $field.is(selector.checkbox),
215
- isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown'),
216
- isCalendar = $calendar.length > 0 && module.can.useElement('calendar'),
217
- isErrored = $fieldGroup.hasClass(className.error)
218
- ;
198
+ let $field = $(el);
199
+ let $element = $field.parent();
200
+ let $fieldGroup = $field.closest($group);
201
+ let $prompt = $fieldGroup.find(selector.prompt);
202
+ let $calendar = $field.closest(selector.uiCalendar);
203
+ let defaultValue = $field.data(metadata.defaultValue) || '';
204
+ let isCheckbox = $field.is(selector.checkbox);
205
+ let isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown');
206
+ let isCalendar = $calendar.length > 0 && module.can.useElement('calendar');
207
+ let isErrored = $fieldGroup.hasClass(className.error);
219
208
  if (isErrored) {
220
209
  module.verbose('Resetting error on field', $fieldGroup);
221
210
  $fieldGroup.removeClass(className.error);
@@ -238,19 +227,17 @@
238
227
 
239
228
  reset: function () {
240
229
  $field.each(function (index, el) {
241
- var
242
- $field = $(el),
243
- $element = $field.parent(),
244
- $fieldGroup = $field.closest($group),
245
- $calendar = $field.closest(selector.uiCalendar),
246
- $prompt = $fieldGroup.find(selector.prompt),
247
- defaultValue = $field.data(metadata.defaultValue),
248
- isCheckbox = $field.is(selector.checkbox),
249
- isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown'),
250
- isCalendar = $calendar.length > 0 && module.can.useElement('calendar'),
251
- isFile = $field.is(selector.file),
252
- isErrored = $fieldGroup.hasClass(className.error)
253
- ;
230
+ let $field = $(el);
231
+ let $element = $field.parent();
232
+ let $fieldGroup = $field.closest($group);
233
+ let $calendar = $field.closest(selector.uiCalendar);
234
+ let $prompt = $fieldGroup.find(selector.prompt);
235
+ let defaultValue = $field.data(metadata.defaultValue);
236
+ let isCheckbox = $field.is(selector.checkbox);
237
+ let isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown');
238
+ let isCalendar = $calendar.length > 0 && module.can.useElement('calendar');
239
+ let isFile = $field.is(selector.file);
240
+ let isErrored = $fieldGroup.hasClass(className.error);
254
241
  if (defaultValue === undefined) {
255
242
  return;
256
243
  }
@@ -277,14 +264,11 @@
277
264
 
278
265
  determine: {
279
266
  isValid: function () {
280
- var
281
- allValid = true
282
- ;
267
+ let allValid = true;
283
268
  $field.each(function (index, el) {
284
- var $el = $(el),
285
- validation = module.get.validation($el) || {},
286
- identifier = module.get.identifier(validation, $el)
287
- ;
269
+ let $el = $(el);
270
+ let validation = module.get.validation($el) || {};
271
+ let identifier = module.get.identifier(validation, $el);
288
272
  if (!module.validate.field(validation, identifier, true)) {
289
273
  allValid = false;
290
274
  }
@@ -293,14 +277,12 @@
293
277
  return allValid;
294
278
  },
295
279
  isDirty: function (e) {
296
- var formIsDirty = false;
280
+ let formIsDirty = false;
297
281
 
298
282
  $field.each(function (index, el) {
299
- var
300
- $el = $(el),
301
- isCheckbox = $el.filter(selector.checkbox).length > 0,
302
- isDirty
303
- ;
283
+ let $el = $(el);
284
+ let isCheckbox = $el.filter(selector.checkbox).length > 0;
285
+ let isDirty;
304
286
 
305
287
  isDirty = isCheckbox
306
288
  ? module.is.checkboxDirty($el)
@@ -341,9 +323,7 @@
341
323
  return String($field.val()).trim() === '';
342
324
  },
343
325
  valid: function (field, showErrors) {
344
- var
345
- allValid = true
346
- ;
326
+ let allValid = true;
347
327
  if (field) {
348
328
  module.verbose('Checking if field is valid', field);
349
329
 
@@ -366,25 +346,25 @@
366
346
  return !dirty;
367
347
  },
368
348
  fieldDirty: function ($el) {
369
- var initialValue = $el.data(metadata.defaultValue);
349
+ let initialValue = $el.data(metadata.defaultValue);
370
350
  // Explicitly check for undefined/null here as value may be `false`, so ($el.data(dataInitialValue) || '') would not work
371
351
  if (initialValue === undefined || initialValue === null) {
372
352
  initialValue = '';
373
353
  } else if (Array.isArray(initialValue)) {
374
354
  initialValue = initialValue.toString();
375
355
  }
376
- var currentValue = $el.val();
356
+ let currentValue = $el.val();
377
357
  if (currentValue === undefined || currentValue === null) {
378
358
  currentValue = '';
379
359
  } else if (Array.isArray(currentValue)) {
380
- // multiple select values are returned as arrays which are never equal, so do string conversion first
360
+ // multiple select values are returned as arrays which are never equal, so do the string conversion first
381
361
  currentValue = currentValue.toString();
382
362
  }
383
- // Boolean values can be encoded as "true/false" or "True/False" depending on underlying frameworks so we need a case insensitive comparison
384
- var boolRegex = /^(true|false)$/i;
385
- var isBoolValue = boolRegex.test(initialValue) && boolRegex.test(currentValue);
363
+ // Boolean values can be encoded as "true/false" or "True/False" depending on underlying frameworks, so we need a case-insensitive comparison
364
+ let boolRegex = /^(true|false)$/i;
365
+ let isBoolValue = boolRegex.test(initialValue) && boolRegex.test(currentValue);
386
366
  if (isBoolValue) {
387
- var regex = new RegExp('^' + initialValue + '$', 'i');
367
+ let regex = new RegExp('^' + initialValue + '$', 'i');
388
368
 
389
369
  return !regex.test(currentValue);
390
370
  }
@@ -392,8 +372,8 @@
392
372
  return currentValue !== initialValue;
393
373
  },
394
374
  checkboxDirty: function ($el) {
395
- var initialValue = $el.data(metadata.defaultValue);
396
- var currentValue = $el.is(':checked');
375
+ let initialValue = $el.data(metadata.defaultValue);
376
+ let currentValue = $el.is(':checked');
397
377
 
398
378
  return initialValue !== currentValue;
399
379
  },
@@ -421,22 +401,19 @@
421
401
  event: {
422
402
  field: {
423
403
  keydown: function (event) {
424
- var
425
- $field = $(this),
426
- key = event.which,
427
- isInput = $field.is(selector.input),
428
- isCheckbox = $field.is(selector.checkbox),
429
- isInDropdown = $field.closest(selector.uiDropdown).length > 0,
430
- keyCode = {
431
- enter: 13,
432
- escape: 27,
433
- }
434
- ;
404
+ let $field = $(this);
405
+ let key = event.which;
406
+ let isInput = $field.is(selector.input);
407
+ let isCheckbox = $field.is(selector.checkbox);
408
+ let isInDropdown = $field.closest(selector.uiDropdown).length > 0;
409
+ let keyCode = {
410
+ enter: 13,
411
+ escape: 27,
412
+ };
435
413
  if (key === keyCode.escape) {
436
414
  module.verbose('Escape key pressed blurring field');
437
415
  $field[0]
438
- .blur()
439
- ;
416
+ .blur();
440
417
  }
441
418
  if (!event.ctrlKey && key === keyCode.enter && isInput && !isInDropdown && !isCheckbox) {
442
419
  if (!keyHeldDown) {
@@ -454,11 +431,9 @@
454
431
  event.preventDefault();
455
432
  },
456
433
  blur: function (event) {
457
- var
458
- $field = $(this),
459
- validationRules = module.get.validation($field) || {},
460
- identifier = module.get.identifier(validationRules, $field)
461
- ;
434
+ let $field = $(this);
435
+ let validationRules = module.get.validation($field) || {};
436
+ let identifier = module.get.identifier(validationRules, $field);
462
437
  if (settings.on === 'blur' || (!$module.hasClass(className.initial) && settings.revalidate)) {
463
438
  module.debug('Revalidating field', $field, validationRules);
464
439
  module.validate.field(validationRules, identifier);
@@ -468,11 +443,9 @@
468
443
  }
469
444
  },
470
445
  change: function (event) {
471
- var
472
- $field = $(this),
473
- validationRules = module.get.validation($field) || {},
474
- identifier = module.get.identifier(validationRules, $field)
475
- ;
446
+ let $field = $(this);
447
+ let validationRules = module.get.validation($field) || {};
448
+ let identifier = module.get.identifier(validationRules, $field);
476
449
  if (settings.on === 'change' || (!$module.hasClass(className.initial) && settings.revalidate)) {
477
450
  clearTimeout(module.timer);
478
451
  module.timer = setTimeout(function () {
@@ -494,7 +467,7 @@
494
467
  event.returnValue = settings.text.leavingMessage;
495
468
  }
496
469
 
497
- // For olders...
470
+ // For older...
498
471
  return settings.text.leavingMessage;
499
472
  }
500
473
  },
@@ -522,9 +495,7 @@
522
495
  return ['file', 'checkbox', 'radio', 'hidden'].indexOf(type) >= 0 || $input.is('select') ? 'change' : 'input';
523
496
  },
524
497
  fieldsFromShorthand: function (fields) {
525
- var
526
- fullFields = {}
527
- ;
498
+ let fullFields = {};
528
499
  $.each(fields, function (name, rules) {
529
500
  if (!Array.isArray(rules) && typeof rules === 'object') {
530
501
  fullFields[name] = rules;
@@ -541,7 +512,7 @@
541
512
  }
542
513
 
543
514
  $.each(fullFields[name].rules, function (index, rule) {
544
- var ruleName = module.get.ruleName(rule);
515
+ let ruleName = module.get.ruleName(rule);
545
516
  if (ruleName === 'empty') {
546
517
  module.warn('*** DEPRECATED *** : Rule "empty" for field "' + name + '" will be removed in a future version. -> Use "notEmpty" rule instead.');
547
518
  }
@@ -554,20 +525,18 @@
554
525
  return validation.identifier || $el.attr('id') || $el.attr('name') || $el.data(metadata.validate);
555
526
  },
556
527
  prompt: function (rule, field) {
557
- var
558
- ruleName = module.get.ruleName(rule),
559
- ancillary = module.get.ancillaryValue(rule),
560
- $field = module.get.field(field.identifier),
561
- value = $field.val(),
562
- promptCheck = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,
563
- prompt = String(isFunction(promptCheck)
564
- ? promptCheck.call($field[0], value)
565
- : promptCheck),
566
- requiresValue = prompt.search('{value}') !== -1,
567
- requiresName = prompt.search('{name}') !== -1,
568
- parts,
569
- suffixPrompt
570
- ;
528
+ let ruleName = module.get.ruleName(rule);
529
+ let ancillary = module.get.ancillaryValue(rule);
530
+ let $field = module.get.field(field.identifier);
531
+ let value = $field.val();
532
+ let promptCheck = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule;
533
+ let prompt = String(isFunction(promptCheck)
534
+ ? promptCheck.call($field[0], value)
535
+ : promptCheck);
536
+ let requiresValue = prompt.search('{value}') !== -1;
537
+ let requiresName = prompt.search('{name}') !== -1;
538
+ let parts;
539
+ let suffixPrompt;
571
540
  if (ancillary && ['integer', 'decimal', 'number', 'size'].indexOf(ruleName) >= 0 && ancillary.indexOf('..') >= 0) {
572
541
  parts = ancillary.split('..', 2);
573
542
  if (!rule.prompt && ruleName !== 'size') {
@@ -630,21 +599,20 @@
630
599
  },
631
600
  field: function (identifier, strict, ignoreMissing) {
632
601
  module.verbose('Finding field with identifier', identifier);
633
- identifier = module.escape.string(identifier);
634
- var t;
635
- t = $field.filter('#' + identifier);
602
+ let t;
603
+ t = $field.filter('#' + CSS.escape(identifier));
636
604
  if (t.length > 0) {
637
605
  return t;
638
606
  }
639
- t = $field.filter('[name="' + identifier + '"]');
607
+ t = $field.filter('[name="' + CSS.escape(identifier) + '"]');
640
608
  if (t.length > 0) {
641
609
  return t;
642
610
  }
643
- t = $field.filter('[name="' + identifier + '[]"]');
611
+ t = $field.filter('[name="' + CSS.escape(identifier) + '[]"]');
644
612
  if (t.length > 0) {
645
613
  return t;
646
614
  }
647
- t = $field.filter('[data-' + metadata.validate + '="' + identifier + '"]');
615
+ t = $field.filter('[data-' + metadata.validate + '="' + CSS.escape(identifier) + '"]');
648
616
  if (t.length > 0) {
649
617
  return t;
650
618
  }
@@ -655,9 +623,7 @@
655
623
  return strict ? $() : $('<input/>');
656
624
  },
657
625
  fields: function (fields, strict) {
658
- var
659
- $fields = $()
660
- ;
626
+ let $fields = $();
661
627
  $.each(fields, function (index, name) {
662
628
  $fields = $fields.add(module.get.field(name, strict));
663
629
  });
@@ -665,21 +631,18 @@
665
631
  return $fields;
666
632
  },
667
633
  fieldLabel: function (identifier, useIdAsFallback) {
668
- var $field = typeof identifier === 'string'
669
- ? module.get.field(identifier)
670
- : identifier,
671
- $label = $field.closest(selector.group).find('label:not(:empty)').eq(0)
672
- ;
634
+ let $field = typeof identifier === 'string'
635
+ ? module.get.field(identifier)
636
+ : identifier;
637
+ let $label = $field.closest(selector.group).find('label:not(:empty)').eq(0);
673
638
 
674
639
  return $label.length === 1
675
640
  ? $label.text()
676
641
  : $field.prop('placeholder') || (useIdAsFallback ? identifier : settings.text.unspecifiedField);
677
642
  },
678
643
  validation: function ($field) {
679
- var
680
- fieldValidation,
681
- identifier
682
- ;
644
+ let fieldValidation;
645
+ let identifier;
683
646
  if (!validation) {
684
647
  return false;
685
648
  }
@@ -698,11 +661,9 @@
698
661
  return fieldValidation || false;
699
662
  },
700
663
  value: function (field, strict) {
701
- var
702
- fields = [],
703
- results,
704
- resultKeys
705
- ;
664
+ let fields = [];
665
+ let results;
666
+ let resultKeys;
706
667
  fields.push(field);
707
668
  results = module.get.values.call(element, fields, strict);
708
669
  resultKeys = Object.keys(results);
@@ -710,26 +671,22 @@
710
671
  return resultKeys.length > 0 ? results[resultKeys[0]] : undefined;
711
672
  },
712
673
  values: function (fields, strict) {
713
- var
714
- $fields = Array.isArray(fields) && fields.length > 0
715
- ? module.get.fields(fields, strict)
716
- : $field,
717
- values = {}
718
- ;
674
+ let $fields = Array.isArray(fields) && fields.length > 0
675
+ ? module.get.fields(fields, strict)
676
+ : $field;
677
+ let values = {};
719
678
  $fields.each(function (index, field) {
720
- var
721
- $field = $(field),
722
- $calendar = $field.closest(selector.uiCalendar),
723
- name = $field.prop('name') || $field.prop('id'),
724
- value = $field.val(),
725
- isCheckbox = $field.is(selector.checkbox),
726
- isRadio = $field.is(selector.radio),
727
- isMultiple = name.indexOf('[]') !== -1,
728
- isCalendar = $calendar.length > 0 && module.can.useElement('calendar'),
729
- isChecked = isCheckbox
730
- ? $field.is(':checked')
731
- : false
732
- ;
679
+ let $field = $(field);
680
+ let $calendar = $field.closest(selector.uiCalendar);
681
+ let name = $field.prop('name') || $field.prop('id');
682
+ let value = $field.val();
683
+ let isCheckbox = $field.is(selector.checkbox);
684
+ let isRadio = $field.is(selector.radio);
685
+ let isMultiple = name.indexOf('[]') !== -1;
686
+ let isCalendar = $calendar.length > 0 && module.can.useElement('calendar');
687
+ let isChecked = isCheckbox
688
+ ? $field.is(':checked')
689
+ : false;
733
690
  if (name) {
734
691
  if (isMultiple) {
735
692
  name = name.replace('[]', '');
@@ -755,7 +712,7 @@
755
712
  } else if (isCheckbox) {
756
713
  values[name] = isChecked ? value || true : false;
757
714
  } else if (isCalendar) {
758
- var date = $calendar.calendar('get date');
715
+ let date = $calendar.calendar('get date');
759
716
 
760
717
  if (date !== null) {
761
718
  switch (settings.dateHandling) {
@@ -770,7 +727,7 @@
770
727
  break;
771
728
  }
772
729
  case 'formatter': {
773
- var type = $calendar.calendar('setting', 'type');
730
+ let type = $calendar.calendar('setting', 'type');
774
731
 
775
732
  switch (type) {
776
733
  case 'date': {
@@ -847,14 +804,6 @@
847
804
  },
848
805
  },
849
806
 
850
- escape: {
851
- string: function (text) {
852
- text = String(text);
853
-
854
- return text.replace(regExp.escape, '\\$&');
855
- },
856
- },
857
-
858
807
  checkErrors: function (errors, internal) {
859
808
  if (!errors || errors.length === 0) {
860
809
  if (!internal) {
@@ -883,11 +832,9 @@
883
832
  rules: [],
884
833
  };
885
834
  }
886
- var
887
- newValidation = {
888
- rules: [],
889
- }
890
- ;
835
+ let newValidation = {
836
+ rules: [],
837
+ };
891
838
  if (module.is.shorthandRules(rules)) {
892
839
  rules = Array.isArray(rules)
893
840
  ? rules
@@ -918,18 +865,15 @@
918
865
  if (errors === false) {
919
866
  return;
920
867
  }
921
- var
922
- $field = module.get.field(identifier),
923
- $fieldGroup = $field.closest($group),
924
- $prompt = $fieldGroup.children(selector.prompt),
925
- promptExists = $prompt.length > 0,
926
- canTransition = settings.transition && module.can.useElement('transition')
927
- ;
868
+ let $field = module.get.field(identifier);
869
+ let $fieldGroup = $field.closest($group);
870
+ let $prompt = $fieldGroup.children(selector.prompt);
871
+ let promptExists = $prompt.length > 0;
872
+ let canTransition = settings.transition && module.can.useElement('transition');
928
873
  module.verbose('Adding field error state', identifier);
929
874
  if (!internal) {
930
875
  $fieldGroup
931
- .addClass(className.error)
932
- ;
876
+ .addClass(className.error);
933
877
  }
934
878
  if (settings.inline) {
935
879
  if (promptExists) {
@@ -949,12 +893,10 @@
949
893
  $prompt.css('display', 'none');
950
894
  }
951
895
  $prompt
952
- .appendTo($fieldGroup.filter('.' + className.error))
953
- ;
896
+ .appendTo($fieldGroup.filter('.' + className.error));
954
897
  }
955
898
  $prompt
956
- .html(settings.templates.prompt(errors))
957
- ;
899
+ .html(settings.templates.prompt(errors));
958
900
  if (!promptExists) {
959
901
  if (canTransition) {
960
902
  module.verbose('Displaying error with css transition', settings.transition);
@@ -962,8 +904,7 @@
962
904
  } else {
963
905
  module.verbose('Displaying error with fallback javascript animation');
964
906
  $prompt
965
- .fadeIn(settings.duration)
966
- ;
907
+ .fadeIn(settings.duration);
967
908
  }
968
909
  }
969
910
  } else {
@@ -977,9 +918,8 @@
977
918
  }
978
919
  module.debug('Adding form error messages', errors);
979
920
  module.set.error();
980
- var customErrors = [],
981
- tempErrors
982
- ;
921
+ let customErrors = [];
922
+ let tempErrors;
983
923
  if ($.isPlainObject(errors)) {
984
924
  $.each(Object.keys(errors), function (i, id) {
985
925
  if (module.checkErrors(errors[id], true) !== false) {
@@ -1002,8 +942,7 @@
1002
942
  }
1003
943
  if (customErrors.length > 0) {
1004
944
  $message
1005
- .html(settings.templates.error(customErrors))
1006
- ;
945
+ .html(settings.templates.error(customErrors));
1007
946
  }
1008
947
  },
1009
948
  },
@@ -1021,11 +960,9 @@
1021
960
  module.determine.isDirty();
1022
961
  },
1023
962
  rule: function (field, rule) {
1024
- var
1025
- rules = Array.isArray(rule)
1026
- ? rule
1027
- : [rule]
1028
- ;
963
+ let rules = Array.isArray(rule)
964
+ ? rule
965
+ : [rule];
1029
966
  if (validation[field] === undefined || !Array.isArray(validation[field].rules)) {
1030
967
  return;
1031
968
  }
@@ -1047,11 +984,9 @@
1047
984
  });
1048
985
  },
1049
986
  field: function (field) {
1050
- var
1051
- fields = Array.isArray(field)
1052
- ? field
1053
- : [field]
1054
- ;
987
+ let fields = Array.isArray(field)
988
+ ? field
989
+ : [field];
1055
990
  $.each(fields, function (index, field) {
1056
991
  module.remove.rule(field);
1057
992
  });
@@ -1071,14 +1006,11 @@
1071
1006
  module.remove.field(fields);
1072
1007
  },
1073
1008
  prompt: function (identifier) {
1074
- var
1075
- $field = module.get.field(identifier),
1076
- $fieldGroup = $field.closest($group),
1077
- $prompt = $fieldGroup.children(selector.prompt)
1078
- ;
1009
+ let $field = module.get.field(identifier);
1010
+ let $fieldGroup = $field.closest($group);
1011
+ let $prompt = $fieldGroup.children(selector.prompt);
1079
1012
  $fieldGroup
1080
- .removeClass(className.error)
1081
- ;
1013
+ .removeClass(className.error);
1082
1014
  if (settings.inline && $prompt.is(':visible')) {
1083
1015
  module.verbose('Removing prompt for field', identifier);
1084
1016
  if (settings.transition && module.can.useElement('transition')) {
@@ -1089,8 +1021,7 @@
1089
1021
  $prompt
1090
1022
  .fadeOut(settings.duration, function () {
1091
1023
  $prompt.remove();
1092
- })
1093
- ;
1024
+ });
1094
1025
  }
1095
1026
  }
1096
1027
  },
@@ -1100,22 +1031,19 @@
1100
1031
  success: function () {
1101
1032
  $module
1102
1033
  .removeClass(className.error)
1103
- .addClass(className.success)
1104
- ;
1034
+ .addClass(className.success);
1105
1035
  },
1106
1036
  defaults: function () {
1107
1037
  $field.each(function (index, el) {
1108
- var
1109
- $el = $(el),
1110
- $parent = $el.parent(),
1111
- isCheckbox = $el.filter(selector.checkbox).length > 0,
1112
- isDropdown = ($parent.is(selector.uiDropdown) || $el.is(selector.uiDropdown)) && module.can.useElement('dropdown'),
1113
- $calendar = $el.closest(selector.uiCalendar),
1114
- isCalendar = $calendar.length > 0 && module.can.useElement('calendar'),
1115
- value = isCheckbox
1116
- ? $el.is(':checked')
1117
- : $el.val()
1118
- ;
1038
+ let $el = $(el);
1039
+ let $parent = $el.parent();
1040
+ let isCheckbox = $el.filter(selector.checkbox).length > 0;
1041
+ let isDropdown = ($parent.is(selector.uiDropdown) || $el.is(selector.uiDropdown)) && module.can.useElement('dropdown');
1042
+ let $calendar = $el.closest(selector.uiCalendar);
1043
+ let isCalendar = $calendar.length > 0 && module.can.useElement('calendar');
1044
+ let value = isCheckbox
1045
+ ? $el.is(':checked')
1046
+ : $el.val();
1119
1047
  if (isDropdown) {
1120
1048
  if ($parent.is(selector.uiDropdown)) {
1121
1049
  $parent.dropdown('save defaults');
@@ -1132,13 +1060,10 @@
1132
1060
  error: function () {
1133
1061
  $module
1134
1062
  .removeClass(className.success)
1135
- .addClass(className.error)
1136
- ;
1063
+ .addClass(className.error);
1137
1064
  },
1138
1065
  value: function (field, value) {
1139
- var
1140
- fields = {}
1141
- ;
1066
+ let fields = {};
1142
1067
  fields[field] = value;
1143
1068
 
1144
1069
  return module.set.values.call(element, fields);
@@ -1148,25 +1073,23 @@
1148
1073
  return;
1149
1074
  }
1150
1075
  $.each(fields, function (key, value) {
1151
- var
1152
- $field = module.get.field(key),
1153
- $element = $field.parent(),
1154
- $calendar = $field.closest(selector.uiCalendar),
1155
- isFile = $field.is(selector.file),
1156
- isMultiple = Array.isArray(value),
1157
- isCheckbox = $element.is(selector.uiCheckbox) && module.can.useElement('checkbox'),
1158
- isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown'),
1159
- isRadio = $field.is(selector.radio) && isCheckbox,
1160
- isCalendar = $calendar.length > 0 && module.can.useElement('calendar'),
1161
- fieldExists = $field.length > 0,
1162
- $multipleField
1163
- ;
1076
+ let $field = module.get.field(key);
1077
+ let $element = $field.parent();
1078
+ let $calendar = $field.closest(selector.uiCalendar);
1079
+ let isFile = $field.is(selector.file);
1080
+ let isMultiple = Array.isArray(value);
1081
+ let isCheckbox = $element.is(selector.uiCheckbox) && module.can.useElement('checkbox');
1082
+ let isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown');
1083
+ let isRadio = $field.is(selector.radio) && isCheckbox;
1084
+ let isCalendar = $calendar.length > 0 && module.can.useElement('calendar');
1085
+ let fieldExists = $field.length > 0;
1086
+ let $multipleField;
1164
1087
  if (fieldExists) {
1165
1088
  if (isMultiple && isCheckbox) {
1166
1089
  module.verbose('Selecting multiple', value, $field);
1167
1090
  $element.checkbox('uncheck');
1168
1091
  $.each(value, function (index, value) {
1169
- $multipleField = $field.filter('[value="' + value + '"]');
1092
+ $multipleField = $field.filter('[value="' + CSS.escape(value) + '"]');
1170
1093
  $element = $multipleField.parent();
1171
1094
  if ($multipleField.length > 0) {
1172
1095
  $element.checkbox('check');
@@ -1174,10 +1097,9 @@
1174
1097
  });
1175
1098
  } else if (isRadio) {
1176
1099
  module.verbose('Selecting radio value', value, $field);
1177
- $field.filter('[value="' + value + '"]')
1100
+ $field.filter('[value="' + CSS.escape(value) + '"]')
1178
1101
  .parent(selector.uiCheckbox)
1179
- .checkbox('check')
1180
- ;
1102
+ .checkbox('check');
1181
1103
  } else if (isCheckbox) {
1182
1104
  module.verbose('Setting checkbox value', value, $element);
1183
1105
  if (value === true || value === 1 || value === 'on') {
@@ -1239,20 +1161,18 @@
1239
1161
  });
1240
1162
  }
1241
1163
  $field.each(function (_index, el) {
1242
- var
1243
- $el = $(el),
1244
- $elGroup = $el.closest($group),
1245
- isCheckbox = $el.filter(selector.checkbox).length > 0,
1246
- isRequired = $el.prop('required') || $elGroup.hasClass(className.required) || $elGroup.parent().hasClass(className.required),
1247
- isDisabled = $el.is(':disabled') || $elGroup.hasClass(className.disabled) || $elGroup.parent().hasClass(className.disabled),
1248
- validation = module.get.validation($el),
1249
- hasNotEmptyRule = validation
1250
- ? $.grep(validation.rules, function (rule) {
1251
- return ['notEmpty', 'checked', 'empty'].indexOf(rule.type) >= 0;
1252
- }).length > 0
1253
- : false,
1254
- identifier = module.get.identifier(validation, $el)
1255
- ;
1164
+ let $el = $(el);
1165
+ let $elGroup = $el.closest($group);
1166
+ let isCheckbox = $el.filter(selector.checkbox).length > 0;
1167
+ let isRequired = $el.prop('required') || $elGroup.hasClass(className.required) || $elGroup.parent().hasClass(className.required);
1168
+ let isDisabled = $el.is(':disabled') || $elGroup.hasClass(className.disabled) || $elGroup.parent().hasClass(className.disabled);
1169
+ let validation = module.get.validation($el);
1170
+ let hasNotEmptyRule = validation
1171
+ ? $.grep(validation.rules, function (rule) {
1172
+ return ['notEmpty', 'checked', 'empty'].indexOf(rule.type) >= 0;
1173
+ }).length > 0
1174
+ : false;
1175
+ let identifier = module.get.identifier(validation, $el);
1256
1176
  if (isRequired && !isDisabled && !hasNotEmptyRule && identifier !== undefined) {
1257
1177
  if (isCheckbox) {
1258
1178
  module.verbose("Adding 'checked' rule on field", identifier);
@@ -1277,7 +1197,7 @@
1277
1197
  validate: {
1278
1198
 
1279
1199
  form: function (event, ignoreCallbacks) {
1280
- var values = module.get.values();
1200
+ let values = module.get.values();
1281
1201
 
1282
1202
  // input keydown event will fire submit repeatedly by browser default
1283
1203
  if (keyHeldDown) {
@@ -1308,14 +1228,12 @@
1308
1228
  event.stopImmediatePropagation();
1309
1229
  }
1310
1230
  if (settings.errorFocus && ignoreCallbacks !== true) {
1311
- var
1312
- $focusElement,
1313
- hasTabIndex = true
1314
- ;
1231
+ let $focusElement;
1232
+ let hasTabIndex = true;
1315
1233
  if (typeof settings.errorFocus === 'string') {
1316
1234
  $focusElement = $(document).find(settings.errorFocus);
1317
1235
  hasTabIndex = $focusElement.is('[tabindex]');
1318
- // to be able to focus/scroll into non input elements we need a tabindex
1236
+ // to be able to focus/scroll into non-input elements, we need a tabindex
1319
1237
  if (!hasTabIndex) {
1320
1238
  $focusElement.attr('tabindex', -1);
1321
1239
  }
@@ -1349,20 +1267,18 @@
1349
1267
 
1350
1268
  return true;
1351
1269
  }
1352
- var
1353
- identifier = field.identifier || fieldName,
1354
- $field = module.get.field(identifier),
1355
- $fieldGroup = $field.closest($group),
1356
- $dependsField = field.depends
1357
- ? module.get.field(field.depends)
1358
- : false,
1359
- fieldValid = true,
1360
- fieldErrors = [],
1361
- isDisabled = $field.filter(':not(:disabled)').length === 0 || $fieldGroup.hasClass(className.disabled) || $fieldGroup.parent().hasClass(className.disabled),
1362
- validationMessage = $field[0].validationMessage,
1363
- noNativeValidation = field.noNativeValidation || settings.noNativeValidation || $field.filter('[formnovalidate],[novalidate]').length > 0 || $module.filter('[novalidate]').length > 0,
1364
- errorLimit
1365
- ;
1270
+ let identifier = field.identifier || fieldName;
1271
+ let $field = module.get.field(identifier);
1272
+ let $fieldGroup = $field.closest($group);
1273
+ let $dependsField = field.depends
1274
+ ? module.get.field(field.depends)
1275
+ : false;
1276
+ let fieldValid = true;
1277
+ let fieldErrors = [];
1278
+ let isDisabled = $field.filter(':not(:disabled)').length === 0 || $fieldGroup.hasClass(className.disabled) || $fieldGroup.parent().hasClass(className.disabled);
1279
+ let validationMessage = $field[0].validationMessage;
1280
+ let noNativeValidation = field.noNativeValidation || settings.noNativeValidation || $field.filter('[formnovalidate],[novalidate]').length > 0 || $module.filter('[novalidate]').length > 0;
1281
+ let errorLimit;
1366
1282
  if (!field.identifier) {
1367
1283
  module.debug('Using field name as identifier', identifier);
1368
1284
  field.identifier = identifier;
@@ -1387,10 +1303,10 @@
1387
1303
  errorLimit = field.errorLimit || settings.errorLimit;
1388
1304
  $.each(field.rules, function (index, rule) {
1389
1305
  if (module.has.field(identifier) && (!errorLimit || fieldErrors.length < errorLimit)) {
1390
- var invalidFields = module.validate.rule(field, rule, true) || [];
1306
+ let invalidFields = module.validate.rule(field, rule, true) || [];
1391
1307
  if (invalidFields.length > 0) {
1392
1308
  module.debug('Field is invalid', identifier, rule.type);
1393
- var fieldError = module.get.prompt(rule, field);
1309
+ let fieldError = module.get.prompt(rule, field);
1394
1310
  if (!settings.inline) {
1395
1311
  if (
1396
1312
  // Always allow the first error prompt for new field identifiers
@@ -1434,25 +1350,23 @@
1434
1350
 
1435
1351
  // takes validation rule and returns whether field passes rule
1436
1352
  rule: function (field, rule, internal) {
1437
- var
1438
- $field = module.get.field(field.identifier),
1439
- ancillary = module.get.ancillaryValue(rule),
1440
- ruleName = module.get.ruleName(rule),
1441
- ruleFunction = settings.rules[ruleName],
1442
- invalidFields = [],
1443
- isCheckbox = $field.is(selector.checkbox),
1444
- isValid = function (field) {
1445
- var value = isCheckbox ? $(field).filter(':checked').val() : $(field).val();
1446
- // cast to string avoiding encoding special values
1447
- value = value === undefined || value === '' || value === null
1448
- ? ''
1449
- : ((settings.shouldTrim && rule.shouldTrim !== false) || rule.shouldTrim
1450
- ? String(value + '').trim()
1451
- : String(value + ''));
1452
-
1453
- return ruleFunction.call(field, value, ancillary, module);
1454
- }
1455
- ;
1353
+ let $field = module.get.field(field.identifier);
1354
+ let ancillary = module.get.ancillaryValue(rule);
1355
+ let ruleName = module.get.ruleName(rule);
1356
+ let ruleFunction = settings.rules[ruleName];
1357
+ let invalidFields = [];
1358
+ let isCheckbox = $field.is(selector.checkbox);
1359
+ let isValid = function (field) {
1360
+ let value = isCheckbox ? $(field).filter(':checked').val() : $(field).val();
1361
+ // cast to string avoiding encoding special values
1362
+ value = value === undefined || value === '' || value === null
1363
+ ? ''
1364
+ : ((settings.shouldTrim && rule.shouldTrim !== false) || rule.shouldTrim
1365
+ ? String(value + '').trim()
1366
+ : String(value + ''));
1367
+
1368
+ return ruleFunction.call(field, value, ancillary, module);
1369
+ };
1456
1370
  if (!isFunction(ruleFunction)) {
1457
1371
  module.error(error.noRule, ruleName);
1458
1372
 
@@ -1526,11 +1440,9 @@
1526
1440
  },
1527
1441
  performance: {
1528
1442
  log: function (message) {
1529
- var
1530
- currentTime,
1531
- executionTime,
1532
- previousTime
1533
- ;
1443
+ let currentTime;
1444
+ let executionTime;
1445
+ let previousTime;
1534
1446
  if (settings.performance) {
1535
1447
  currentTime = Date.now();
1536
1448
  previousTime = time || currentTime;
@@ -1549,10 +1461,8 @@
1549
1461
  }, 500);
1550
1462
  },
1551
1463
  display: function () {
1552
- var
1553
- title = settings.name + ':',
1554
- totalTime = 0
1555
- ;
1464
+ let title = settings.name + ':';
1465
+ let totalTime = 0;
1556
1466
  time = false;
1557
1467
  clearTimeout(module.performance.timer);
1558
1468
  $.each(performance, function (index, data) {
@@ -1577,19 +1487,17 @@
1577
1487
  },
1578
1488
  },
1579
1489
  invoke: function (query, passedArguments, context) {
1580
- var
1581
- object = instance,
1582
- maxDepth,
1583
- found,
1584
- response
1585
- ;
1490
+ let object = instance;
1491
+ let maxDepth;
1492
+ let found;
1493
+ let response;
1586
1494
  passedArguments = passedArguments || queryArguments;
1587
1495
  context = context || element;
1588
1496
  if (typeof query === 'string' && object !== undefined) {
1589
1497
  query = query.split(/[ .]/);
1590
1498
  maxDepth = query.length - 1;
1591
1499
  $.each(query, function (depth, value) {
1592
- var camelCaseValue = depth !== maxDepth
1500
+ let camelCaseValue = depth !== maxDepth
1593
1501
  ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
1594
1502
  : query;
1595
1503
  if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
@@ -1774,9 +1682,7 @@
1774
1682
 
1775
1683
  // template that produces error message
1776
1684
  error: function (errors) {
1777
- var
1778
- html = '<ul class="list">'
1779
- ;
1685
+ let html = '<ul class="list">';
1780
1686
  $.each(errors, function (index, value) {
1781
1687
  html += '<li>' + value + '</li>';
1782
1688
  });
@@ -1790,9 +1696,7 @@
1790
1696
  if (errors.length === 1) {
1791
1697
  return errors[0];
1792
1698
  }
1793
- var
1794
- html = '<ul class="ui list">'
1795
- ;
1699
+ let html = '<ul class="ui list">';
1796
1700
  $.each(errors, function (index, value) {
1797
1701
  html += '<li>' + value + '</li>';
1798
1702
  });
@@ -1843,11 +1747,6 @@
1843
1747
  return !(value === undefined || value === '' || (Array.isArray(value) && value.length === 0));
1844
1748
  },
1845
1749
 
1846
- /* Deprecated */
1847
- empty: function (value) {
1848
- return $.fn.form.settings.rules.notEmpty(value);
1849
- },
1850
-
1851
1750
  // checkbox checked
1852
1751
  checked: function () {
1853
1752
  return $(this).filter(':checked').length > 0;
@@ -1858,7 +1757,7 @@
1858
1757
  return $.fn.form.settings.regExp.email.test(value);
1859
1758
  },
1860
1759
 
1861
- // value is most likely url
1760
+ // value is most likely the url
1862
1761
  url: function (value) {
1863
1762
  return $.fn.form.settings.regExp.url.test(value);
1864
1763
  },
@@ -1868,10 +1767,8 @@
1868
1767
  if (regExp instanceof RegExp) {
1869
1768
  return value.match(regExp);
1870
1769
  }
1871
- var
1872
- regExpParts = regExp.match($.fn.form.settings.regExp.flags),
1873
- flags
1874
- ;
1770
+ let regExpParts = regExp.match($.fn.form.settings.regExp.flags);
1771
+ let flags;
1875
1772
  // regular expression specified as /baz/gi (flags)
1876
1773
  if (regExpParts) {
1877
1774
  regExp = regExpParts.length >= 2
@@ -1901,11 +1798,9 @@
1901
1798
  if (!(regExp instanceof RegExp)) {
1902
1799
  regExp = $.fn.form.settings.regExp.integer;
1903
1800
  }
1904
- var
1905
- min,
1906
- max,
1907
- parts
1908
- ;
1801
+ let min;
1802
+ let max;
1803
+ let parts;
1909
1804
  if (!range || ['', '..'].indexOf(range) !== -1) {
1910
1805
 
1911
1806
  // do nothing
@@ -1934,7 +1829,7 @@
1934
1829
  );
1935
1830
  },
1936
1831
 
1937
- // is valid number (with decimal)
1832
+ // is it a valid number (with decimal)
1938
1833
  decimal: function (value, range) {
1939
1834
  return $.fn.form.settings.rules.range(value, range, 'decimal');
1940
1835
  },
@@ -1944,7 +1839,7 @@
1944
1839
  return $.fn.form.settings.rules.range(value, range, 'number');
1945
1840
  },
1946
1841
 
1947
- // is value (case insensitive)
1842
+ // is value (case-insensitive)
1948
1843
  is: function (value, text) {
1949
1844
  text = typeof text === 'string'
1950
1845
  ? text.toLowerCase()
@@ -1961,7 +1856,7 @@
1961
1856
  return value == text;
1962
1857
  },
1963
1858
 
1964
- // value is not another value (case insensitive)
1859
+ // value is not another value (case-insensitive)
1965
1860
  not: function (value, notValue) {
1966
1861
  value = typeof value === 'string'
1967
1862
  ? value.toLowerCase()
@@ -1973,7 +1868,7 @@
1973
1868
  return value != notValue;
1974
1869
  },
1975
1870
 
1976
- // value is not another value (case sensitive)
1871
+ // value is not another value (case-sensitive)
1977
1872
  notExactly: function (value, notValue) {
1978
1873
  return value != notValue;
1979
1874
  },
@@ -2031,16 +1926,16 @@
2031
1926
 
2032
1927
  // matches another field
2033
1928
  match: function (value, identifier, module) {
2034
- var matchingValue = module.get.value(identifier, true);
1929
+ let matchingValue = module.get.value(identifier, true);
2035
1930
 
2036
1931
  return matchingValue !== undefined
2037
1932
  ? value.toString() === matchingValue.toString()
2038
1933
  : false;
2039
1934
  },
2040
1935
 
2041
- // different than another field
1936
+ // different from another field
2042
1937
  different: function (value, identifier, module) {
2043
- var matchingValue = module.get.value(identifier, true);
1938
+ let matchingValue = module.get.value(identifier, true);
2044
1939
 
2045
1940
  return matchingValue !== undefined
2046
1941
  ? value.toString() !== matchingValue.toString()
@@ -2048,57 +1943,55 @@
2048
1943
  },
2049
1944
 
2050
1945
  creditCard: function (cardNumber, cardTypes) {
2051
- var
2052
- cards = {
2053
- visa: {
2054
- pattern: /^4/,
2055
- length: [16],
2056
- },
2057
- amex: {
2058
- pattern: /^3[47]/,
2059
- length: [15],
2060
- },
2061
- mastercard: {
2062
- pattern: /^5[1-5]/,
2063
- length: [16],
2064
- },
2065
- discover: {
2066
- pattern: /^(6011|622(12[6-9]|1[3-9]\d|[2-8]\d{2}|9[01]\d|92[0-5]|64[4-9])|65)/,
2067
- length: [16],
2068
- },
2069
- unionPay: {
2070
- pattern: /^(62|88)/,
2071
- length: [16, 17, 18, 19],
2072
- },
2073
- jcb: {
2074
- pattern: /^35(2[89]|[3-8]\d)/,
2075
- length: [16],
2076
- },
2077
- maestro: {
2078
- pattern: /^(5018|5020|5038|6304|6759|676[1-3])/,
2079
- length: [12, 13, 14, 15, 16, 17, 18, 19],
2080
- },
2081
- dinersClub: {
2082
- pattern: /^(30[0-5]|^36)/,
2083
- length: [14],
2084
- },
2085
- laser: {
2086
- pattern: /^(6304|670[69]|6771)/,
2087
- length: [16, 17, 18, 19],
2088
- },
2089
- visaElectron: {
2090
- pattern: /^(4026|417500|4508|4844|491(3|7))/,
2091
- length: [16],
2092
- },
1946
+ let cards = {
1947
+ visa: {
1948
+ pattern: /^4/,
1949
+ length: [16],
1950
+ },
1951
+ amex: {
1952
+ pattern: /^3[47]/,
1953
+ length: [15],
1954
+ },
1955
+ mastercard: {
1956
+ pattern: /^5[1-5]/,
1957
+ length: [16],
2093
1958
  },
2094
- valid = {},
2095
- validCard = false,
2096
- requiredTypes = typeof cardTypes === 'string'
2097
- ? cardTypes.split(',')
2098
- : false,
2099
- unionPay,
2100
- validation
2101
- ;
1959
+ discover: {
1960
+ pattern: /^(6011|622(12[6-9]|1[3-9]\d|[2-8]\d{2}|9[01]\d|92[0-5]|64[4-9])|65)/,
1961
+ length: [16],
1962
+ },
1963
+ unionPay: {
1964
+ pattern: /^(62|88)/,
1965
+ length: [16, 17, 18, 19],
1966
+ },
1967
+ jcb: {
1968
+ pattern: /^35(2[89]|[3-8]\d)/,
1969
+ length: [16],
1970
+ },
1971
+ maestro: {
1972
+ pattern: /^(5018|5020|5038|6304|6759|676[1-3])/,
1973
+ length: [12, 13, 14, 15, 16, 17, 18, 19],
1974
+ },
1975
+ dinersClub: {
1976
+ pattern: /^(30[0-5]|^36)/,
1977
+ length: [14],
1978
+ },
1979
+ laser: {
1980
+ pattern: /^(6304|670[69]|6771)/,
1981
+ length: [16, 17, 18, 19],
1982
+ },
1983
+ visaElectron: {
1984
+ pattern: /^(4026|417500|4508|4844|491(3|7))/,
1985
+ length: [16],
1986
+ },
1987
+ };
1988
+ let valid = {};
1989
+ let validCard = false;
1990
+ let requiredTypes = typeof cardTypes === 'string'
1991
+ ? cardTypes.split(',')
1992
+ : false;
1993
+ let unionPay;
1994
+ let validation;
2102
1995
 
2103
1996
  if (typeof cardNumber !== 'string' || cardNumber.length === 0) {
2104
1997
  return;
@@ -2138,15 +2031,13 @@
2138
2031
  }
2139
2032
 
2140
2033
  // verify luhn, adapted from <https://gist.github.com/2134376>
2141
- var
2142
- length = cardNumber.length,
2143
- multiple = 0,
2144
- producedValue = [
2145
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
2146
- [0, 2, 4, 6, 8, 1, 3, 5, 7, 9],
2147
- ],
2148
- sum = 0
2149
- ;
2034
+ let length = cardNumber.length;
2035
+ let multiple = 0;
2036
+ let producedValue = [
2037
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
2038
+ [0, 2, 4, 6, 8, 1, 3, 5, 7, 9],
2039
+ ];
2040
+ let sum = 0;
2150
2041
  while (length--) {
2151
2042
  sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];
2152
2043
  multiple ^= 1; // eslint-disable-line no-bitwise