@internetstiftelsen/styleguide 5.0.18 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/app.js +71 -0
  2. package/dist/assets/js/Events.js +43 -77
  3. package/dist/assets/js/RequestError.js +16 -31
  4. package/dist/assets/js/anchorScroll.js +22 -15
  5. package/dist/assets/js/charCounter.js +100 -142
  6. package/dist/assets/js/className.js +19 -20
  7. package/dist/assets/js/conditional.js +96 -152
  8. package/dist/assets/js/debounce.js +15 -22
  9. package/dist/assets/js/el.js +108 -159
  10. package/dist/assets/js/getCookieByName.js +13 -11
  11. package/dist/assets/js/hasCookieConsent.js +30 -40
  12. package/dist/assets/js/htmlTextLength.js +12 -10
  13. package/dist/assets/js/iconToggle.js +16 -20
  14. package/dist/assets/js/nodeAdded.js +40 -53
  15. package/dist/assets/js/objToQuery.js +25 -41
  16. package/dist/assets/js/offset.js +29 -25
  17. package/dist/assets/js/ot.js +10 -13
  18. package/dist/assets/js/parallax.js +23 -23
  19. package/dist/assets/js/queryToObj.js +16 -22
  20. package/dist/assets/js/readSpeakerHandling.js +26 -28
  21. package/dist/assets/js/request.js +43 -52
  22. package/dist/assets/js/responsivePosition.js +46 -74
  23. package/dist/assets/js/stringToNode.js +11 -10
  24. package/dist/assets/js/template.js +15 -21
  25. package/dist/assets/js/textToggle.js +19 -24
  26. package/dist/assets/js/track.js +14 -12
  27. package/dist/assets/js/uid.js +10 -6
  28. package/dist/assets/js/utmGenerator.js +27 -33
  29. package/dist/assets/js/validationMessage.js +18 -25
  30. package/dist/assets/js/youtube.js +134 -170
  31. package/dist/atoms/button/Button.js +42 -55
  32. package/dist/atoms/file/file.js +25 -29
  33. package/dist/atoms/file/filePreview.js +27 -31
  34. package/dist/atoms/grid-toggle/grid-toggle.js +6 -9
  35. package/dist/atoms/height-limiter/height-limiter.js +37 -50
  36. package/dist/atoms/password-toggle/password-toggle.js +9 -11
  37. package/dist/atoms/range/range.js +32 -39
  38. package/dist/atoms/textarea/rich-text.js +223 -205
  39. package/dist/atoms/tooltip/tooltip.js +13 -17
  40. package/dist/components.js +42 -77
  41. package/dist/focusTrap.js +66 -77
  42. package/dist/molecules/alert/alert.js +15 -20
  43. package/dist/molecules/context-menu/context-menu.js +11 -16
  44. package/dist/molecules/continue-video-guide/continue-video-guide.js +90 -101
  45. package/dist/molecules/cookie-disclaimer/cookie-disclaimer.js +24 -33
  46. package/dist/molecules/form/Form.js +242 -352
  47. package/dist/molecules/form/index.js +15 -14
  48. package/dist/molecules/glider/glider-course.js +62 -75
  49. package/dist/molecules/glider/glider-hero.js +88 -101
  50. package/dist/molecules/glider/glider.js +49 -45
  51. package/dist/molecules/modal/modal.js +256 -325
  52. package/dist/molecules/multi-select/multi-select.js +198 -304
  53. package/dist/molecules/natural-language-form/natural-language-form.js +32 -46
  54. package/dist/molecules/overview-navigation/overview-navigation.js +90 -141
  55. package/dist/molecules/share/share.js +15 -20
  56. package/dist/molecules/system-error/system-error.js +6 -9
  57. package/dist/organisms/accordion/accordion.js +44 -50
  58. package/dist/organisms/footer/footer.js +1 -1
  59. package/dist/organisms/haveibeenpwned/haveibeenpwned.js +17 -16
  60. package/dist/organisms/mailchimp/mailchimp.js +72 -89
  61. package/dist/organisms/map-box/map-box.js +3 -4
  62. package/dist/organisms/mega-menu/mega-menu.js +177 -212
  63. package/dist/organisms/podcast/podcast.js +192 -215
  64. package/dist/organisms/schedule/schedule-filter.js +9 -15
  65. package/dist/organisms/tabs/tabs.js +194 -253
  66. package/dist/organisms/timeline/openTimelineItem.js +38 -51
  67. package/dist/organisms/timeline/timeline.js +111 -128
  68. package/dist/organisms/video-guide/VideoGuidePlayback.js +210 -286
  69. package/dist/organisms/video-guide/VideoGuideSubtitles.js +57 -80
  70. package/dist/organisms/video-guide/VideoGuideTimeline.js +74 -108
  71. package/dist/organisms/video-guide/getCurrentCueIndex.js +11 -9
  72. package/dist/organisms/video-guide/video-guide.js +66 -103
  73. package/dist/utilities/tab-highlighting/tab-highlighting.js +14 -22
  74. package/dist/vendor/toggle/a11y.toggle-switcher.js +10 -16
  75. package/package.json +78 -99
  76. package/src/app.js +5 -5
  77. package/src/assets/js/anchorScroll.js +1 -1
  78. package/src/assets/js/offset.js +1 -1
  79. package/src/atoms/button/Button.js +1 -1
  80. package/src/atoms/icon/richtext-ordered-list.svg +1 -1
  81. package/src/atoms/icon/sprite.svg +6 -5
  82. package/src/molecules/glider/glider-course.js +0 -2
  83. package/src/molecules/glider/glider.js +2 -2
  84. package/src/organisms/accordion/accordion.js +1 -2
  85. package/src/organisms/timeline/timeline.js +2 -3
  86. package/dist/atoms/timeline/anchorScroll.js +0 -13
  87. package/dist/atoms/toggle-high-contrast/toggle-high-contrast.js +0 -12
  88. package/dist/molecules/glider/glider-single.js +0 -68
  89. package/dist/molecules/modal/modal-graph.js +0 -40
  90. package/dist/molecules/timeline-navigation/timeline-navigation.js +0 -34
  91. /package/src/atoms/icon/{heading-3.svg → richtext-heading-3.svg} +0 -0
  92. /package/src/molecules/alert/{_alert.scss → alert.scss} +0 -0
@@ -1,354 +1,244 @@
1
- 'use strict';
2
-
1
+ "use strict";
3
2
  Object.defineProperty(exports, "__esModule", {
4
- value: true
3
+ value: true
5
4
  });
6
-
7
- var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8
-
9
- var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
10
-
11
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
12
-
13
- var _template = require('lodash/template');
14
-
15
- var _template2 = _interopRequireDefault(_template);
16
-
17
- var _Events = require('../../assets/js/Events');
18
-
19
- var _Events2 = _interopRequireDefault(_Events);
20
-
21
- var _Button = require('../../atoms/button/Button');
22
-
23
- var _Button2 = _interopRequireDefault(_Button);
24
-
25
- var _className = require('../../assets/js/className');
26
-
27
- var _className2 = _interopRequireDefault(_className);
28
-
29
- var _validationMessage = require('../../assets/js/validationMessage');
30
-
31
- var _validationMessage2 = _interopRequireDefault(_validationMessage);
32
-
33
- var _request = require('../../assets/js/request');
34
-
35
- var _request2 = _interopRequireDefault(_request);
36
-
37
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
38
-
39
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
40
-
41
- var Form = function () {
42
- function Form(element) {
43
- var _this = this;
44
-
45
- var i18n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
46
-
47
- _classCallCheck(this, Form);
48
-
49
- this.onSubmit = function (e) {
50
- e.preventDefault();
51
-
52
- _this.updateData();
53
- _this.clearFieldErrors();
54
-
55
- if (_this.validate()) {
56
- _this.send();
57
- } else {
58
- _this.displayError({ message: _this.i18n('Alla fält måste vara ifyllda') });
59
- }
60
- };
61
-
62
- this.displayError = function (error) {
63
- _this.events.emit('error', error);
64
- _this.setLoading(false);
65
-
66
- if ('response' in error) {
67
- var response = error.response;
68
-
69
-
70
- if ('data' in response && response.data && response.data.errors) {
71
- _this.errors = response.data.errors;
72
- }
73
- }
74
-
75
- if (Object.keys(_this.errors).length) {
76
- Object.entries(_this.errors).forEach(_this.displayFieldError);
77
-
78
- return;
79
- }
80
-
81
- var message = 'response' in error ? error.response.message : error.statusText;
82
-
83
- _this.error.classList.remove('is-hidden');
84
- _this.error.innerHTML = message || _this.i18n('Något gick fel');
85
- };
86
-
87
- this.displayFieldError = function (_ref) {
88
- var _ref2 = _slicedToArray(_ref, 2),
89
- name = _ref2[0],
90
- error = _ref2[1];
91
-
92
- var input = _this.element.querySelector('[name="' + name + '"]');
93
-
94
- if (!input) {
95
- return;
96
- }
97
-
98
- var id = input.getAttribute('aria-describedby');
99
-
100
- if (!id) {
101
- id = name + '-help';
102
- input.setAttribute('aria-describedby', id);
103
- }
104
-
105
- var help = document.getElementById(id);
106
-
107
- if (!help) {
108
- help = document.createElement('div');
109
- help.id = id;
110
- help.className = (0, _className2.default)('input-help');
111
-
112
- var _fieldGroup = input.closest('[class*="field-group"]');
113
-
114
- if (_fieldGroup) {
115
- _fieldGroup.appendChild(help);
116
- }
117
- }
118
-
119
- help.innerHTML = error.map(_validationMessage2.default).join('<br>');
120
-
121
- var fieldGroup = input.closest('[class*="field-group"]');
122
-
123
- if (fieldGroup) {
124
- fieldGroup.classList.add('is-invalid');
125
- }
126
- };
127
-
128
- this.onSuccess = function (json) {
129
- _this.setLoading(false);
130
-
131
- var tmpl = (0, _template2.default)(_this.successMessage);
132
-
133
- _this.success.classList.remove('is-hidden');
134
- _this.success.innerHTML = tmpl(json);
135
-
136
- _this.events.emit('success', json);
137
- };
138
-
139
- this.reset = function () {
140
- _this.element.reset();
141
- _this.hideMessages();
142
-
143
- _this.success.innerHTML = '';
144
- _this.error.innerHTML = '';
145
- };
146
-
147
- this.element = element;
148
- this.submit = new _Button2.default(this.element.querySelector('button[type="submit"]'));
149
- this.error = this.element.querySelector('[data-form-error]');
150
- this.success = this.element.querySelector('[data-form-success]');
151
- this.events = new _Events2.default();
152
-
153
- if (this.success) {
154
- var tpl = document.getElementById(this.success.getAttribute('data-form-success'));
155
- this.successMessage = tpl ? tpl.innerHTML : '';
156
- }
157
-
158
- this.validation = this.element.querySelector('meta[name="form-validation"]');
159
- this.i18n = i18n;
160
-
161
- if (!this.i18n) {
162
- this.i18n = function (str) {
163
- return str;
164
- };
165
- }
166
-
167
- this.data = {};
168
- this.errors = {};
169
- this.validationRules = null;
170
-
171
- if (this.validation) {
172
- this.parseValidationRules();
173
- }
174
-
175
- this.collectInputs();
176
- this.attach();
177
- }
178
-
179
- _createClass(Form, [{
180
- key: 'collectInputs',
181
- value: function collectInputs() {
182
- this.inputs = this.element.querySelectorAll('input');
183
- }
184
- }, {
185
- key: 'parseValidationRules',
186
- value: function parseValidationRules() {
187
- var _this2 = this;
188
-
189
- var validationsStr = this.validation.getAttribute('content');
190
- var validations = validationsStr.split('|');
191
-
192
- if (!validations.length) {
193
- return;
194
- }
195
-
196
- this.validationRules = {};
197
-
198
- validations.forEach(function (validation) {
199
- var _validation$split = validation.split('='),
200
- _validation$split2 = _slicedToArray(_validation$split, 2),
201
- name = _validation$split2[0],
202
- rulesStr = _validation$split2[1];
203
-
204
- _this2.validationRules[name] = rulesStr.split(',');
205
- });
206
- }
207
- }, {
208
- key: 'attach',
209
- value: function attach() {
210
- this.element.addEventListener('submit', this.onSubmit);
211
- this.element.addEventListener('reset', this.reset);
212
- }
213
- }, {
214
- key: 'updateData',
215
- value: function updateData() {
216
- var data = _extends({}, this.data);
217
-
218
- this.collectInputs();
219
- this.inputs.forEach(function (input) {
220
- var name = input.getAttribute('name');
221
- var value = input.value;
222
-
223
- var type = input.getAttribute('type');
224
-
225
- if (type === 'radio' && input.checked || type === 'checkbox' && input.checked || type !== 'checkbox' && type !== 'radio' && value && value.length) {
226
- data[name] = value;
227
- } else if (type === 'checkbox' && !input.checked) {
228
- delete data[name];
229
- }
230
- });
231
-
232
- this.data = data;
233
- }
234
- }, {
235
- key: 'validateRule',
236
- value: function validateRule(value, rule, field) {
237
- var _rule$split = rule.split(':'),
238
- _rule$split2 = _slicedToArray(_rule$split, 2),
239
- ruleName = _rule$split2[0],
240
- ruleData = _rule$split2[1];
241
-
242
- switch (ruleName) {
243
- case 'required':
244
- {
245
- return field in this.data;
246
- }
247
- case 'min':
248
- {
249
- return !value || value.length >= parseInt(ruleData, 10);
250
- }
251
- default:
252
- {
253
- return true;
254
- }
255
- }
256
- }
257
- }, {
258
- key: 'validate',
259
- value: function validate() {
260
- var _this3 = this;
261
-
262
- this.errors = {};
263
-
264
- if (!this.validationRules) {
265
- return true;
266
- }
267
-
268
- Object.entries(this.validationRules).forEach(function (_ref3) {
269
- var _ref4 = _slicedToArray(_ref3, 2),
270
- field = _ref4[0],
271
- rules = _ref4[1];
272
-
273
- rules.forEach(function (rule) {
274
- if (!_this3.validateRule(_this3.data[field], rule, field)) {
275
- if (!(field in _this3.errors)) {
276
- _this3.errors[field] = [];
277
- }
278
-
279
- _this3.errors[field].push(rule);
280
- }
281
- });
282
- });
283
-
284
- return Object.keys(this.errors).length < 1;
285
- }
286
- }, {
287
- key: 'setLoading',
288
- value: function setLoading(loading) {
289
- if (loading) {
290
- this.inputs.forEach(function (input) {
291
- input.disabled = true;
292
- });
293
- this.submit.start();
294
- this.element.classList.add('is-loading');
295
- } else {
296
- this.inputs.forEach(function (input) {
297
- input.disabled = false;
298
- });
299
- this.submit.stop();
300
- this.element.classList.remove('is-loading');
301
- }
302
- }
303
- }, {
304
- key: 'clearFieldErrors',
305
- value: function clearFieldErrors() {
306
- this.inputs.forEach(function (input) {
307
- var id = input.getAttribute('aria-describedby');
308
-
309
- if (!id) {
310
- id = input.getAttribute('name') + '-help';
311
- input.setAttribute('aria-describedby', id);
312
- }
313
-
314
- var help = document.getElementById(id);
315
-
316
- if (help) {
317
- help.innerHTML = '';
318
- }
319
-
320
- var fieldGroup = input.closest('[class*="field-group"]');
321
-
322
- if (fieldGroup) {
323
- fieldGroup.classList.remove('is-invalid');
324
- }
325
- });
326
- }
327
- }, {
328
- key: 'hideMessages',
329
- value: function hideMessages() {
330
- this.success.classList.add('is-hidden');
331
- this.error.classList.add('is-hidden');
332
- }
333
- }, {
334
- key: 'send',
335
- value: function send() {
336
- this.hideMessages();
337
- this.setLoading(true);
338
-
339
- var data = _extends({}, this.data);
340
- var method = this.element.getAttribute('method').toUpperCase() || 'POST';
341
- var url = this.element.getAttribute('data-form');
342
-
343
- if (this.token) {
344
- data.token = this.token;
345
- }
346
-
347
- (0, _request2.default)(url, data, method).then(this.onSuccess).catch(this.displayError);
348
- }
349
- }]);
350
-
351
- return Form;
352
- }();
353
-
354
- exports.default = Form;
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Form;
9
+ }
10
+ });
11
+ const _template = /*#__PURE__*/ _interop_require_default(require("lodash/template"));
12
+ const _Events = /*#__PURE__*/ _interop_require_default(require("../../assets/js/Events"));
13
+ const _Button = /*#__PURE__*/ _interop_require_default(require("../../atoms/button/Button"));
14
+ const _className = /*#__PURE__*/ _interop_require_default(require("../../assets/js/className"));
15
+ const _validationMessage = /*#__PURE__*/ _interop_require_default(require("../../assets/js/validationMessage"));
16
+ const _request = /*#__PURE__*/ _interop_require_default(require("../../assets/js/request"));
17
+ function _extends() {
18
+ _extends = Object.assign || function(target) {
19
+ for(var i = 1; i < arguments.length; i++){
20
+ var source = arguments[i];
21
+ for(var key in source){
22
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
23
+ target[key] = source[key];
24
+ }
25
+ }
26
+ }
27
+ return target;
28
+ };
29
+ return _extends.apply(this, arguments);
30
+ }
31
+ function _interop_require_default(obj) {
32
+ return obj && obj.__esModule ? obj : {
33
+ default: obj
34
+ };
35
+ }
36
+ class Form {
37
+ collectInputs() {
38
+ this.inputs = this.element.querySelectorAll('input');
39
+ }
40
+ parseValidationRules() {
41
+ const validationsStr = this.validation.getAttribute('content');
42
+ const validations = validationsStr.split('|');
43
+ if (!validations.length) {
44
+ return;
45
+ }
46
+ this.validationRules = {};
47
+ validations.forEach((validation)=>{
48
+ const [name, rulesStr] = validation.split('=');
49
+ this.validationRules[name] = rulesStr.split(',');
50
+ });
51
+ }
52
+ attach() {
53
+ this.element.addEventListener('submit', this.onSubmit);
54
+ this.element.addEventListener('reset', this.reset);
55
+ }
56
+ updateData() {
57
+ const data = _extends({}, this.data);
58
+ this.collectInputs();
59
+ this.inputs.forEach((input)=>{
60
+ const name = input.getAttribute('name');
61
+ const { value } = input;
62
+ const type = input.getAttribute('type');
63
+ if (type === 'radio' && input.checked || type === 'checkbox' && input.checked || type !== 'checkbox' && type !== 'radio' && value && value.length) {
64
+ data[name] = value;
65
+ } else if (type === 'checkbox' && !input.checked) {
66
+ delete data[name];
67
+ }
68
+ });
69
+ this.data = data;
70
+ }
71
+ validateRule(value, rule, field) {
72
+ const [ruleName, ruleData] = rule.split(':');
73
+ switch(ruleName){
74
+ case 'required':
75
+ {
76
+ return field in this.data;
77
+ }
78
+ case 'min':
79
+ {
80
+ return !value || value.length >= parseInt(ruleData, 10);
81
+ }
82
+ default:
83
+ {
84
+ return true;
85
+ }
86
+ }
87
+ }
88
+ validate() {
89
+ this.errors = {};
90
+ if (!this.validationRules) {
91
+ return true;
92
+ }
93
+ Object.entries(this.validationRules).forEach(([field, rules])=>{
94
+ rules.forEach((rule)=>{
95
+ if (!this.validateRule(this.data[field], rule, field)) {
96
+ if (!(field in this.errors)) {
97
+ this.errors[field] = [];
98
+ }
99
+ this.errors[field].push(rule);
100
+ }
101
+ });
102
+ });
103
+ return Object.keys(this.errors).length < 1;
104
+ }
105
+ setLoading(loading) {
106
+ if (loading) {
107
+ this.inputs.forEach((input)=>{
108
+ input.disabled = true;
109
+ });
110
+ this.submit.start();
111
+ this.element.classList.add('is-loading');
112
+ } else {
113
+ this.inputs.forEach((input)=>{
114
+ input.disabled = false;
115
+ });
116
+ this.submit.stop();
117
+ this.element.classList.remove('is-loading');
118
+ }
119
+ }
120
+ clearFieldErrors() {
121
+ this.inputs.forEach((input)=>{
122
+ let id = input.getAttribute('aria-describedby');
123
+ if (!id) {
124
+ id = `${input.getAttribute('name')}-help`;
125
+ input.setAttribute('aria-describedby', id);
126
+ }
127
+ const help = document.getElementById(id);
128
+ if (help) {
129
+ help.innerHTML = '';
130
+ }
131
+ const fieldGroup = input.closest('[class*="field-group"]');
132
+ if (fieldGroup) {
133
+ fieldGroup.classList.remove('is-invalid');
134
+ }
135
+ });
136
+ }
137
+ hideMessages() {
138
+ this.success.classList.add('is-hidden');
139
+ this.error.classList.add('is-hidden');
140
+ }
141
+ send() {
142
+ this.hideMessages();
143
+ this.setLoading(true);
144
+ const data = _extends({}, this.data);
145
+ const method = this.element.getAttribute('method').toUpperCase() || 'POST';
146
+ const url = this.element.getAttribute('data-form');
147
+ if (this.token) {
148
+ data.token = this.token;
149
+ }
150
+ (0, _request.default)(url, data, method).then(this.onSuccess).catch(this.displayError);
151
+ }
152
+ constructor(element, i18n = null){
153
+ this.onSubmit = (e)=>{
154
+ e.preventDefault();
155
+ this.updateData();
156
+ this.clearFieldErrors();
157
+ if (this.validate()) {
158
+ this.send();
159
+ } else {
160
+ this.displayError({
161
+ message: this.i18n('Alla fält måste vara ifyllda')
162
+ });
163
+ }
164
+ };
165
+ this.displayError = (error)=>{
166
+ this.events.emit('error', error);
167
+ this.setLoading(false);
168
+ if ('response' in error) {
169
+ const { response } = error;
170
+ if ('data' in response && response.data && response.data.errors) {
171
+ this.errors = response.data.errors;
172
+ }
173
+ }
174
+ if (Object.keys(this.errors).length) {
175
+ Object.entries(this.errors).forEach(this.displayFieldError);
176
+ return;
177
+ }
178
+ const message = 'response' in error ? error.response.message : error.statusText;
179
+ this.error.classList.remove('is-hidden');
180
+ this.error.innerHTML = message || this.i18n('Något gick fel');
181
+ };
182
+ this.displayFieldError = ([name, error])=>{
183
+ const input = this.element.querySelector(`[name="${name}"]`);
184
+ if (!input) {
185
+ return;
186
+ }
187
+ let id = input.getAttribute('aria-describedby');
188
+ if (!id) {
189
+ id = `${name}-help`;
190
+ input.setAttribute('aria-describedby', id);
191
+ }
192
+ let help = document.getElementById(id);
193
+ if (!help) {
194
+ help = document.createElement('div');
195
+ help.id = id;
196
+ help.className = (0, _className.default)('input-help');
197
+ const fieldGroup = input.closest('[class*="field-group"]');
198
+ if (fieldGroup) {
199
+ fieldGroup.appendChild(help);
200
+ }
201
+ }
202
+ help.innerHTML = error.map(_validationMessage.default).join('<br>');
203
+ const fieldGroup = input.closest('[class*="field-group"]');
204
+ if (fieldGroup) {
205
+ fieldGroup.classList.add('is-invalid');
206
+ }
207
+ };
208
+ this.onSuccess = (json)=>{
209
+ this.setLoading(false);
210
+ const tmpl = (0, _template.default)(this.successMessage);
211
+ this.success.classList.remove('is-hidden');
212
+ this.success.innerHTML = tmpl(json);
213
+ this.events.emit('success', json);
214
+ };
215
+ this.reset = ()=>{
216
+ this.element.reset();
217
+ this.hideMessages();
218
+ this.success.innerHTML = '';
219
+ this.error.innerHTML = '';
220
+ };
221
+ this.element = element;
222
+ this.submit = new _Button.default(this.element.querySelector('button[type="submit"]'));
223
+ this.error = this.element.querySelector('[data-form-error]');
224
+ this.success = this.element.querySelector('[data-form-success]');
225
+ this.events = new _Events.default();
226
+ if (this.success) {
227
+ const tpl = document.getElementById(this.success.getAttribute('data-form-success'));
228
+ this.successMessage = tpl ? tpl.innerHTML : '';
229
+ }
230
+ this.validation = this.element.querySelector('meta[name="form-validation"]');
231
+ this.i18n = i18n;
232
+ if (!this.i18n) {
233
+ this.i18n = (str)=>str;
234
+ }
235
+ this.data = {};
236
+ this.errors = {};
237
+ this.validationRules = null;
238
+ if (this.validation) {
239
+ this.parseValidationRules();
240
+ }
241
+ this.collectInputs();
242
+ this.attach();
243
+ }
244
+ }
@@ -1,15 +1,16 @@
1
- 'use strict';
2
-
3
- var _Form = require('./Form');
4
-
5
- var _Form2 = _interopRequireDefault(_Form);
6
-
7
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
-
9
- var elements = document.querySelectorAll('[data-form]');
10
-
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _Form = /*#__PURE__*/ _interop_require_default(require("./Form"));
6
+ function _interop_require_default(obj) {
7
+ return obj && obj.__esModule ? obj : {
8
+ default: obj
9
+ };
10
+ }
11
+ const elements = document.querySelectorAll('[data-form]');
11
12
  if (elements.length) {
12
- elements.forEach(function (element) {
13
- element.form = new _Form2.default(element);
14
- });
15
- }
13
+ elements.forEach((element)=>{
14
+ element.form = new _Form.default(element);
15
+ });
16
+ }