@internetstiftelsen/styleguide 5.0.19 → 5.1.1

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 +221 -251
  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,305 +1,199 @@
1
- 'use strict';
2
-
3
- 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; }; }();
4
-
5
- var _className = require('../../assets/js/className');
6
-
7
- var _className2 = _interopRequireDefault(_className);
8
-
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
-
11
- function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
12
-
13
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
14
-
15
- var MultiSelect = function () {
16
- function MultiSelect(el) {
17
- var _this = this;
18
-
19
- _classCallCheck(this, MultiSelect);
20
-
21
- this.onInput = function () {
22
- var value = _this.input.value;
23
-
24
- // Clear suggestions if less than 2 characters are typed
25
-
26
- if (value.length < 2) {
27
- _this.clearSuggestions();
28
-
29
- return;
30
- }
31
-
32
- var suggestions = _this.filterData(value);
33
-
34
- if (suggestions.length) {
35
- _this.populateSuggestions(suggestions);
36
- } else {
37
- _this.clearSuggestions();
38
- }
39
-
40
- _this.resetFocus();
41
- };
42
-
43
- this.onKeyDown = function (e) {
44
- if (e.keyCode === 40) {
45
- _this.highlight('down');
46
- } else if (e.keyCode === 38) {
47
- _this.highlight('up');
48
- } else if (e.keyCode === 13) {
49
- e.preventDefault();
50
-
51
- _this.selectHighlighted();
52
- }
53
- };
54
-
55
- this.onClick = function (e) {
56
- if (e.target.classList.contains((0, _className2.default)(_this.baseClassName + '__suggestion-btn'))) {
57
- _this.addItem(_this.data.find(function (d) {
58
- return d.value === e.target.value;
59
- }));
60
- _this.clearSuggestions();
61
- _this.input.value = '';
62
- }
63
- };
64
-
65
- this.element = el;
66
- this.baseClassName = 'm-multi-select';
67
- this.currentFocus = -1;
68
- this.name = this.element.getAttribute('data-multi-select-name');
69
- this.input = this.element.querySelector('.js-' + this.baseClassName + '__input');
70
- this.suggestionsBox = this.element.querySelector('.js-' + this.baseClassName + '-suggestions-box');
71
- this.selectedItemsList = this.element.querySelector('.js-m-multi-select-selected-items');
72
- this.selectedItems = [];
73
- this.data = [];
74
-
75
- this.getData();
76
- this.attach();
77
- this.sync();
78
- }
79
-
80
- _createClass(MultiSelect, [{
81
- key: 'getData',
82
- value: function getData() {
83
- var id = this.input.getAttribute('data-multi-select-suggestions');
84
- var el = document.getElementById(id);
85
-
86
- if (!el) {
87
- this.data = [];
88
- return;
89
- }
90
-
91
- this.data = JSON.parse(el.textContent);
92
- }
93
- }, {
94
- key: 'attach',
95
- value: function attach() {
96
- this.input.addEventListener('input', this.onInput);
97
- this.input.addEventListener('keydown', this.onKeyDown);
98
- this.suggestionsBox.addEventListener('click', this.onClick);
99
- }
100
- }, {
101
- key: 'setFocus',
102
- value: function setFocus(index) {
103
- this.currentFocus = index;
104
- }
105
- }, {
106
- key: 'resetFocus',
107
- value: function resetFocus() {
108
- this.setFocus(-1);
109
- }
110
- }, {
111
- key: 'clearSuggestions',
112
- value: function clearSuggestions() {
113
- this.input.setAttribute('aria-expanded', 'false');
114
- this.suggestionsBox.innerHTML = '';
115
- }
116
- }, {
117
- key: 'addSuggestions',
118
- value: function addSuggestions(suggestions) {
119
- var _this2 = this;
120
-
121
- this.data = [].concat(_toConsumableArray(this.data), _toConsumableArray(suggestions.filter(function (s) {
122
- return !_this2.data.find(function (d) {
123
- return d.value === s.value;
124
- });
125
- })));
126
- }
127
- }, {
128
- key: 'sync',
129
- value: function sync() {
130
- var _this3 = this;
131
-
132
- var inputs = this.element.querySelectorAll('input[name="' + this.name + '[]"]');
133
-
134
- this.selectedItems = [];
135
-
136
- inputs.forEach(function (input) {
137
- var item = _this3.data.find(function (d) {
138
- return d.value === input.value;
139
- });
140
-
141
- if (item) {
142
- _this3.addItem(item, false);
143
- }
144
- });
145
- }
146
- }, {
147
- key: 'filterData',
148
- value: function filterData(query) {
149
- var selectedValues = this.selectedItems.map(function (item) {
150
- return item.value;
151
- });
152
-
153
- return this.data.filter(function (item) {
154
- return item.name.toLowerCase().startsWith(query.toLowerCase());
155
- }).filter(function (item) {
156
- return !selectedValues.includes(item.value);
157
- });
158
- }
159
- }, {
160
- key: 'populateSuggestions',
161
- value: function populateSuggestions(suggestions) {
162
- var cls = (0, _className2.default)(this.baseClassName + '__suggestion-btn');
163
- this.suggestionsBox.innerHTML = suggestions.map(function (item) {
164
- return '<button class=\'' + cls + '\' tabindex=\'0\' value="' + item.value + '">' + item.name + '</button>';
165
- }).join('');
166
-
167
- if (this.suggestionsBox.innerHTML) {
168
- this.input.setAttribute('aria-expanded', 'true');
169
- }
170
- }
171
- }, {
172
- key: 'removeItem',
173
- value: function removeItem(item) {
174
- var node = this.element.querySelector('.js-m-multi-select-selected-items li[data-value="' + item.value + '"]');
175
-
176
- if (!node) {
177
- return;
178
- }
179
-
180
- var parent = node.closest('.js-m-multi-select-selected-items');
181
- var index = Array.prototype.indexOf.call(parent.children, node);
182
-
183
- node.remove();
184
-
185
- var remainingItems = parent.getElementsByTagName('li');
186
-
187
- // Focus management: set focus to the next item, or the search input if no items left
188
- if (remainingItems.length > 0) {
189
- if (index < remainingItems.length) {
190
- remainingItems[index].getElementsByTagName('button')[0].focus();
191
- } else {
192
- remainingItems[remainingItems.length - 1].getElementsByTagName('button')[0].focus();
193
- }
194
- } else {
195
- this.input.focus();
196
- }
197
-
198
- this.selectedItems = this.selectedItems.filter(function (i) {
199
- return i.value !== item.value;
200
- });
201
-
202
- var itemInput = this.element.querySelector('input[value="' + item.value + '"]');
203
- itemInput.remove();
204
- }
205
- }, {
206
- key: 'addItem',
207
- value: function addItem(item) {
208
- var _this4 = this;
209
-
210
- var save = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
211
-
212
- if (!item) {
213
- return;
214
- }
215
-
216
- var newItem = document.createElement('li');
217
- newItem.textContent = item.name + ' ';
218
- newItem.setAttribute('data-value', item.value);
219
- newItem.classList.add((0, _className2.default)('a-tag'));
220
- newItem.classList.add((0, _className2.default)(this.baseClassName + '__tag'));
221
-
222
- var removeBtn = document.createElement('button');
223
- removeBtn.classList.add((0, _className2.default)(this.baseClassName + '-selected-items__remove-btn'));
224
-
225
- var buttonTextContainer = document.createElement('span');
226
- buttonTextContainer.classList.add('u-visuallyhidden');
227
- removeBtn.appendChild(buttonTextContainer);
228
- buttonTextContainer.textContent = 'Ta bort ' + item.name; // Accessibility label for screen readers
229
-
230
- // Event listener for removing the selected item
231
- removeBtn.addEventListener('click', function () {
232
- _this4.removeItem(item);
233
- });
234
-
235
- newItem.appendChild(removeBtn);
236
-
237
- this.selectedItemsList.appendChild(newItem);
238
- this.selectedItems.push(item);
239
-
240
- if (save) {
241
- var itemInput = document.createElement('input');
242
-
243
- itemInput.type = 'hidden';
244
- itemInput.name = this.name + '[]';
245
- itemInput.value = item.value;
246
-
247
- this.element.appendChild(itemInput);
248
- }
249
- }
250
- }, {
251
- key: 'removeHighlight',
252
- value: function removeHighlight() {
253
- var items = this.suggestionsBox.getElementsByClassName((0, _className2.default)(this.baseClassName + '__suggestion-btn'));
254
-
255
- [].forEach.call(items, function (item) {
256
- item.classList.remove('autocomplete-active');
257
- });
258
- }
259
- }, {
260
- key: 'highlight',
261
- value: function highlight(direction) {
262
- var items = this.suggestionsBox.getElementsByClassName((0, _className2.default)(this.baseClassName + '__suggestion-btn'));
263
- var focus = this.currentFocus;
264
-
265
- if (direction === 'down') {
266
- focus = focus >= items.length - 1 ? 0 : focus + 1;
267
- } else {
268
- focus = focus <= 0 ? items.length - 1 : focus - 1;
269
- }
270
-
271
- this.setFocus(focus);
272
- this.removeHighlight();
273
-
274
- items[this.currentFocus].classList.add('autocomplete-active');
275
- items[this.currentFocus].scrollIntoView({ block: 'nearest' });
276
- }
277
- }, {
278
- key: 'selectHighlighted',
279
- value: function selectHighlighted() {
280
- var items = this.suggestionsBox.getElementsByClassName((0, _className2.default)(this.baseClassName + '__suggestion-btn'));
281
-
282
- if (this.currentFocus > -1 && items[this.currentFocus]) {
283
- var item = items[this.currentFocus];
284
-
285
- this.addItem(this.data.find(function (d) {
286
- return d.value === item.value;
287
- }));
288
-
289
- this.clearSuggestions();
290
- this.input.value = '';
291
- this.resetFocus();
292
- }
293
- }
294
- }]);
295
-
296
- return MultiSelect;
297
- }();
298
-
299
- var multiSelectElements = document.querySelectorAll('.js-m-multi-select');
300
-
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _className = /*#__PURE__*/ _interop_require_default(require("../../assets/js/className"));
6
+ function _interop_require_default(obj) {
7
+ return obj && obj.__esModule ? obj : {
8
+ default: obj
9
+ };
10
+ }
11
+ class MultiSelect {
12
+ getData() {
13
+ const id = this.input.getAttribute('data-multi-select-suggestions');
14
+ const el = document.getElementById(id);
15
+ if (!el) {
16
+ this.data = [];
17
+ return;
18
+ }
19
+ this.data = JSON.parse(el.textContent);
20
+ }
21
+ attach() {
22
+ this.input.addEventListener('input', this.onInput);
23
+ this.input.addEventListener('keydown', this.onKeyDown);
24
+ this.suggestionsBox.addEventListener('click', this.onClick);
25
+ }
26
+ setFocus(index) {
27
+ this.currentFocus = index;
28
+ }
29
+ resetFocus() {
30
+ this.setFocus(-1);
31
+ }
32
+ clearSuggestions() {
33
+ this.input.setAttribute('aria-expanded', 'false');
34
+ this.suggestionsBox.innerHTML = '';
35
+ }
36
+ addSuggestions(suggestions) {
37
+ this.data = [
38
+ ...this.data,
39
+ ...suggestions.filter((s)=>!this.data.find((d)=>d.value === s.value))
40
+ ];
41
+ }
42
+ sync() {
43
+ const inputs = this.element.querySelectorAll(`input[name="${this.name}[]"]`);
44
+ this.selectedItems = [];
45
+ inputs.forEach((input)=>{
46
+ const item = this.data.find((d)=>d.value === input.value);
47
+ if (item) {
48
+ this.addItem(item, false);
49
+ }
50
+ });
51
+ }
52
+ filterData(query) {
53
+ const selectedValues = this.selectedItems.map((item)=>item.value);
54
+ return this.data.filter((item)=>item.name.toLowerCase().startsWith(query.toLowerCase())).filter((item)=>!selectedValues.includes(item.value));
55
+ }
56
+ populateSuggestions(suggestions) {
57
+ const cls = (0, _className.default)(`${this.baseClassName}__suggestion-btn`);
58
+ this.suggestionsBox.innerHTML = suggestions.map((item)=>`<button class='${cls}' tabindex='0' value="${item.value}">${item.name}</button>`).join('');
59
+ if (this.suggestionsBox.innerHTML) {
60
+ this.input.setAttribute('aria-expanded', 'true');
61
+ }
62
+ }
63
+ removeItem(item) {
64
+ const node = this.element.querySelector(`.js-m-multi-select-selected-items li[data-value="${item.value}"]`);
65
+ if (!node) {
66
+ return;
67
+ }
68
+ const parent = node.closest('.js-m-multi-select-selected-items');
69
+ const index = Array.prototype.indexOf.call(parent.children, node);
70
+ node.remove();
71
+ const remainingItems = parent.getElementsByTagName('li');
72
+ // Focus management: set focus to the next item, or the search input if no items left
73
+ if (remainingItems.length > 0) {
74
+ if (index < remainingItems.length) {
75
+ remainingItems[index].getElementsByTagName('button')[0].focus();
76
+ } else {
77
+ remainingItems[remainingItems.length - 1].getElementsByTagName('button')[0].focus();
78
+ }
79
+ } else {
80
+ this.input.focus();
81
+ }
82
+ this.selectedItems = this.selectedItems.filter((i)=>i.value !== item.value);
83
+ const itemInput = this.element.querySelector(`input[value="${item.value}"]`);
84
+ itemInput.remove();
85
+ }
86
+ addItem(item, save = true) {
87
+ if (!item) {
88
+ return;
89
+ }
90
+ const newItem = document.createElement('li');
91
+ newItem.textContent = `${item.name} `;
92
+ newItem.setAttribute('data-value', item.value);
93
+ newItem.classList.add((0, _className.default)('a-tag'));
94
+ newItem.classList.add((0, _className.default)(`${this.baseClassName}__tag`));
95
+ const removeBtn = document.createElement('button');
96
+ removeBtn.classList.add((0, _className.default)(`${this.baseClassName}-selected-items__remove-btn`));
97
+ const buttonTextContainer = document.createElement('span');
98
+ buttonTextContainer.classList.add('u-visuallyhidden');
99
+ removeBtn.appendChild(buttonTextContainer);
100
+ buttonTextContainer.textContent = `Ta bort ${item.name}`; // Accessibility label for screen readers
101
+ // Event listener for removing the selected item
102
+ removeBtn.addEventListener('click', ()=>{
103
+ this.removeItem(item);
104
+ });
105
+ newItem.appendChild(removeBtn);
106
+ this.selectedItemsList.appendChild(newItem);
107
+ this.selectedItems.push(item);
108
+ if (save) {
109
+ const itemInput = document.createElement('input');
110
+ itemInput.type = 'hidden';
111
+ itemInput.name = `${this.name}[]`;
112
+ itemInput.value = item.value;
113
+ this.element.appendChild(itemInput);
114
+ }
115
+ }
116
+ removeHighlight() {
117
+ const items = this.suggestionsBox.getElementsByClassName((0, _className.default)(`${this.baseClassName}__suggestion-btn`));
118
+ [].forEach.call(items, (item)=>{
119
+ item.classList.remove('autocomplete-active');
120
+ });
121
+ }
122
+ highlight(direction) {
123
+ const items = this.suggestionsBox.getElementsByClassName((0, _className.default)(`${this.baseClassName}__suggestion-btn`));
124
+ let focus = this.currentFocus;
125
+ if (direction === 'down') {
126
+ focus = focus >= items.length - 1 ? 0 : focus + 1;
127
+ } else {
128
+ focus = focus <= 0 ? items.length - 1 : focus - 1;
129
+ }
130
+ this.setFocus(focus);
131
+ this.removeHighlight();
132
+ items[this.currentFocus].classList.add('autocomplete-active');
133
+ items[this.currentFocus].scrollIntoView({
134
+ block: 'nearest'
135
+ });
136
+ }
137
+ selectHighlighted() {
138
+ const items = this.suggestionsBox.getElementsByClassName((0, _className.default)(`${this.baseClassName}__suggestion-btn`));
139
+ if (this.currentFocus > -1 && items[this.currentFocus]) {
140
+ const item = items[this.currentFocus];
141
+ this.addItem(this.data.find((d)=>d.value === item.value));
142
+ this.clearSuggestions();
143
+ this.input.value = '';
144
+ this.resetFocus();
145
+ }
146
+ }
147
+ constructor(el){
148
+ this.onInput = ()=>{
149
+ const { value } = this.input;
150
+ // Clear suggestions if less than 2 characters are typed
151
+ if (value.length < 2) {
152
+ this.clearSuggestions();
153
+ return;
154
+ }
155
+ const suggestions = this.filterData(value);
156
+ if (suggestions.length) {
157
+ this.populateSuggestions(suggestions);
158
+ } else {
159
+ this.clearSuggestions();
160
+ }
161
+ this.resetFocus();
162
+ };
163
+ this.onKeyDown = (e)=>{
164
+ if (e.keyCode === 40) {
165
+ this.highlight('down');
166
+ } else if (e.keyCode === 38) {
167
+ this.highlight('up');
168
+ } else if (e.keyCode === 13) {
169
+ e.preventDefault();
170
+ this.selectHighlighted();
171
+ }
172
+ };
173
+ this.onClick = (e)=>{
174
+ if (e.target.classList.contains((0, _className.default)(`${this.baseClassName}__suggestion-btn`))) {
175
+ this.addItem(this.data.find((d)=>d.value === e.target.value));
176
+ this.clearSuggestions();
177
+ this.input.value = '';
178
+ }
179
+ };
180
+ this.element = el;
181
+ this.baseClassName = 'm-multi-select';
182
+ this.currentFocus = -1;
183
+ this.name = this.element.getAttribute('data-multi-select-name');
184
+ this.input = this.element.querySelector(`.js-${this.baseClassName}__input`);
185
+ this.suggestionsBox = this.element.querySelector(`.js-${this.baseClassName}-suggestions-box`);
186
+ this.selectedItemsList = this.element.querySelector('.js-m-multi-select-selected-items');
187
+ this.selectedItems = [];
188
+ this.data = [];
189
+ this.getData();
190
+ this.attach();
191
+ this.sync();
192
+ }
193
+ }
194
+ const multiSelectElements = document.querySelectorAll('.js-m-multi-select');
301
195
  if (multiSelectElements) {
302
- [].forEach.call(multiSelectElements, function (el) {
303
- el.multiSelect = new MultiSelect(el);
304
- });
305
- }
196
+ [].forEach.call(multiSelectElements, (el)=>{
197
+ el.multiSelect = new MultiSelect(el);
198
+ });
199
+ }
@@ -1,55 +1,41 @@
1
- 'use strict';
2
-
3
- var selects = document.querySelectorAll('.js-natural-language-select');
4
- var inputs = document.querySelectorAll('.js-natural-language-input');
5
-
1
+ "use strict";
2
+ const selects = document.querySelectorAll('.js-natural-language-select');
3
+ const inputs = document.querySelectorAll('.js-natural-language-input');
6
4
  function sync(el, option) {
7
- var color = option.dataset.color;
8
-
9
-
10
- el.dataset.color = color;
11
- el.innerText = option.innerText;
5
+ const { color } = option.dataset;
6
+ el.dataset.color = color;
7
+ el.innerText = option.innerText;
12
8
  }
13
-
14
9
  function setupSelect(select) {
15
- var parent = select.parentNode;
16
- var text = parent.querySelector('label');
17
-
18
- select.addEventListener('change', function () {
19
- sync(text, select.options[select.selectedIndex]);
20
- });
21
-
22
- // Next tick
23
- setTimeout(function () {
24
- sync(text, select.options[select.selectedIndex]);
25
- }, 0);
10
+ const parent = select.parentNode;
11
+ const text = parent.querySelector('label');
12
+ select.addEventListener('change', ()=>{
13
+ sync(text, select.options[select.selectedIndex]);
14
+ });
15
+ // Next tick
16
+ setTimeout(()=>{
17
+ sync(text, select.options[select.selectedIndex]);
18
+ }, 0);
26
19
  }
27
-
28
20
  if (selects) {
29
- [].forEach.call(selects, setupSelect);
21
+ [].forEach.call(selects, setupSelect);
30
22
  }
31
-
32
23
  function syncInput(el, input, value) {
33
- el.innerText = value;
34
-
35
- setTimeout(function () {
36
- var selectWidth = el.getBoundingClientRect().width;
37
- input.style.width = selectWidth + 'px';
38
- }, 0);
24
+ el.innerText = value;
25
+ setTimeout(()=>{
26
+ const selectWidth = el.getBoundingClientRect().width;
27
+ input.style.width = `${selectWidth}px`;
28
+ }, 0);
39
29
  }
40
-
41
30
  if (inputs) {
42
- [].forEach.call(inputs, function (input) {
43
- var text = input.nextElementSibling;
44
-
45
- syncInput(text, input, input.value);
46
-
47
- input.addEventListener('input', function (e) {
48
- syncInput(text, input, e.target.value);
49
- });
50
-
51
- input.addEventListener('change', function (e) {
52
- syncInput(text, input, e.target.value);
53
- });
54
- });
55
- }
31
+ [].forEach.call(inputs, (input)=>{
32
+ const text = input.nextElementSibling;
33
+ syncInput(text, input, input.value);
34
+ input.addEventListener('input', (e)=>{
35
+ syncInput(text, input, e.target.value);
36
+ });
37
+ input.addEventListener('change', (e)=>{
38
+ syncInput(text, input, e.target.value);
39
+ });
40
+ });
41
+ }