@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,192 +1,156 @@
1
- 'use strict';
2
-
1
+ // TODO: Should probably implement a way to localize texts in the styleguide
2
+ "use strict";
3
3
  Object.defineProperty(exports, "__esModule", {
4
- value: true
4
+ value: true
5
5
  });
6
- exports.destroyPlayer = destroyPlayer;
7
- exports.setupPlayers = setupPlayers;
8
-
9
- var _className = require('./className');
10
-
11
- var _className2 = _interopRequireDefault(_className);
12
-
13
- var _hasCookieConsent = require('./hasCookieConsent');
14
-
15
- var _hasCookieConsent2 = _interopRequireDefault(_hasCookieConsent);
16
-
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
-
19
- // TODO: Should probably implement a way to localize texts in the styleguide
20
- var consent = (0, _hasCookieConsent2.default)('C0004');
21
-
22
- var missingConsentMessage = 'För att spela Youtubefilmer krävs att "Riktade kakor" tillåts. Tryck för att "Anpassa kakor"';
23
-
6
+ function _export(target, all) {
7
+ for(var name in all)Object.defineProperty(target, name, {
8
+ enumerable: true,
9
+ get: all[name]
10
+ });
11
+ }
12
+ _export(exports, {
13
+ destroyPlayer: function() {
14
+ return destroyPlayer;
15
+ },
16
+ setupPlayers: function() {
17
+ return setupPlayers;
18
+ }
19
+ });
20
+ const _className = /*#__PURE__*/ _interop_require_default(require("./className"));
21
+ const _hasCookieConsent = /*#__PURE__*/ _interop_require_default(require("./hasCookieConsent"));
22
+ function _interop_require_default(obj) {
23
+ return obj && obj.__esModule ? obj : {
24
+ default: obj
25
+ };
26
+ }
27
+ let consent = (0, _hasCookieConsent.default)('C0004');
28
+ const missingConsentMessage = 'För att spela Youtubefilmer krävs att "Riktade kakor" tillåts. Tryck för att "Anpassa kakor"';
24
29
  function loadYoutubeAPI() {
25
- var id = 'iisYoutubeAPI';
26
-
27
- if (document.getElementById(id)) {
28
- return;
29
- }
30
-
31
- var tag = document.createElement('script');
32
- var firstScript = document.getElementsByTagName('script')[0];
33
-
34
- tag.id = id;
35
- tag.src = 'https://www.youtube.com/iframe_api';
36
-
37
- firstScript.parentNode.insertBefore(tag, firstScript);
30
+ const id = 'iisYoutubeAPI';
31
+ if (document.getElementById(id)) {
32
+ return;
33
+ }
34
+ const tag = document.createElement('script');
35
+ const firstScript = document.getElementsByTagName('script')[0];
36
+ tag.id = id;
37
+ tag.src = 'https://www.youtube.com/iframe_api';
38
+ firstScript.parentNode.insertBefore(tag, firstScript);
38
39
  }
39
-
40
40
  function onPlayerStateChange(el, e) {
41
- /* eslint-disable no-undef */
42
- if (e.data === YT.PlayerState.PLAYING) {
43
- el.getElementsByTagName('img')[0].style.zIndex = '-1';
44
- el.getElementsByTagName('button')[0].style.display = 'none';
45
- } else if (e.data === YT.PlayerState.UNSTARTED) {
46
- el.getElementsByTagName('img')[0].style.zIndex = null;
47
- el.getElementsByTagName('button')[0].style.display = null;
48
- }
41
+ /* eslint-disable no-undef */ if (e.data === YT.PlayerState.PLAYING) {
42
+ el.getElementsByTagName('img')[0].style.zIndex = '-1';
43
+ el.getElementsByTagName('button')[0].style.display = 'none';
44
+ } else if (e.data === YT.PlayerState.UNSTARTED) {
45
+ el.getElementsByTagName('img')[0].style.zIndex = null;
46
+ el.getElementsByTagName('button')[0].style.display = null;
47
+ }
49
48
  }
50
-
51
49
  function createConsentWarning(el) {
52
- if (el.querySelector('[data-youtube-consent-warning]')) {
53
- return;
54
- }
55
-
56
- var div = document.createElement('div');
57
- var button = document.createElement('button');
58
- var message = document.createElement('p');
59
- message.classList.add('color-cyberspace');
60
-
61
- div.setAttribute('data-youtube-consent-warning', true);
62
- div.className = (0, _className2.default)('m-icon-overlay__message');
63
- button.className = (0, _className2.default)('a-button');
64
- button.setAttribute('data-ot-dynamic-show-settings', 'true');
65
- button.innerHTML = '<span class="' + (0, _className2.default)('a-button__text') + '">Anpassa kakor</span>';
66
- message.innerHTML = missingConsentMessage;
67
-
68
- div.appendChild(message);
69
- div.appendChild(button);
70
-
71
- el.appendChild(div);
50
+ if (el.querySelector('[data-youtube-consent-warning]')) {
51
+ return;
52
+ }
53
+ const div = document.createElement('div');
54
+ const button = document.createElement('button');
55
+ const message = document.createElement('p');
56
+ message.classList.add('color-cyberspace');
57
+ div.setAttribute('data-youtube-consent-warning', true);
58
+ div.className = (0, _className.default)('m-icon-overlay__message');
59
+ button.className = (0, _className.default)('a-button');
60
+ button.setAttribute('data-ot-dynamic-show-settings', 'true');
61
+ button.innerHTML = `<span class="${(0, _className.default)('a-button__text')}">Anpassa kakor</span>`;
62
+ message.innerHTML = missingConsentMessage;
63
+ div.appendChild(message);
64
+ div.appendChild(button);
65
+ el.appendChild(div);
72
66
  }
73
-
74
67
  function destroyConsentWarning(el) {
75
- loadYoutubeAPI();
76
- var div = el.querySelector('[data-youtube-consent-warning]');
77
-
78
- if (div) {
79
- div.parentNode.removeChild(div);
80
- }
68
+ loadYoutubeAPI();
69
+ const div = el.querySelector('[data-youtube-consent-warning]');
70
+ if (div) {
71
+ div.parentNode.removeChild(div);
72
+ }
81
73
  }
82
-
83
74
  function createCover(el) {
84
- if (!consent) {
85
- createConsentWarning(el);
86
- } else {
87
- destroyConsentWarning(el);
88
- }
89
-
90
- if (el.getElementsByTagName('img').length) {
91
- return;
92
- }
93
-
94
- var id = el.getAttribute('data-youtube');
95
- var url = 'https://i3.ytimg.com/vi/' + id + '/maxresdefault.jpg';
96
- var img = document.createElement('img');
97
-
98
- el.appendChild(img);
99
-
100
- img.loading = 'lazy';
101
- img.src = url;
102
- img.alt = 'tumnagel för video';
103
- img.width = 480;
104
- img.height = 270;
75
+ if (!consent) {
76
+ createConsentWarning(el);
77
+ } else {
78
+ destroyConsentWarning(el);
79
+ }
80
+ if (el.getElementsByTagName('img').length) {
81
+ return;
82
+ }
83
+ const id = el.getAttribute('data-youtube');
84
+ const url = `https://i3.ytimg.com/vi/${id}/maxresdefault.jpg`;
85
+ const img = document.createElement('img');
86
+ el.appendChild(img);
87
+ img.loading = 'lazy';
88
+ img.src = url;
89
+ img.alt = 'tumnagel för video';
90
+ img.width = 480;
91
+ img.height = 270;
105
92
  }
106
-
107
93
  function setupYoutubePlayer(el) {
108
- if (el.youtube) {
109
- return;
110
- }
111
-
112
- var id = el.getAttribute('data-youtube');
113
- var playerEl = document.createElement('div');
114
-
115
- playerEl.setAttribute('data-youtube-container', true);
116
- el.appendChild(playerEl);
117
-
118
- el.youtube = new YT.Player(playerEl, {
119
- height: '100%',
120
- width: '100%',
121
- videoId: id,
122
- playerVars: {
123
- // https://developers.google.com/youtube/player_parameters#Parameters
124
- playsinline: 1,
125
- autoplay: true,
126
- rel: 0
127
- },
128
- events: {
129
- onStateChange: function onStateChange(e) {
130
- return onPlayerStateChange(el, e);
131
- }
132
- }
133
- });
134
-
135
- el.getElementsByTagName('img')[0].style.zIndex = '-1';
136
- el.getElementsByTagName('button')[0].style.display = 'none';
94
+ if (el.youtube) {
95
+ return;
96
+ }
97
+ const id = el.getAttribute('data-youtube');
98
+ const playerEl = document.createElement('div');
99
+ playerEl.setAttribute('data-youtube-container', true);
100
+ el.appendChild(playerEl);
101
+ el.youtube = new YT.Player(playerEl, {
102
+ height: '100%',
103
+ width: '100%',
104
+ videoId: id,
105
+ playerVars: {
106
+ // https://developers.google.com/youtube/player_parameters#Parameters
107
+ playsinline: 1,
108
+ autoplay: true,
109
+ rel: 0
110
+ },
111
+ events: {
112
+ onStateChange: (e)=>onPlayerStateChange(el, e)
113
+ }
114
+ });
115
+ el.getElementsByTagName('img')[0].style.zIndex = '-1';
116
+ el.getElementsByTagName('button')[0].style.display = 'none';
137
117
  }
138
-
139
118
  function delegateClick(e) {
140
- if (e.target.closest('[data-youtube-consent-warning]')) {
141
- return;
142
- }
143
-
144
- var el = e.target.closest('[data-youtube]');
145
-
146
- if (!el) {
147
- return;
148
- }
149
-
150
- if (!el.youtube) {
151
- setupYoutubePlayer(el);
152
-
153
- return;
154
- }
155
-
156
- el.youtube.playVideo();
119
+ if (e.target.closest('[data-youtube-consent-warning]')) {
120
+ return;
121
+ }
122
+ const el = e.target.closest('[data-youtube]');
123
+ if (!el) {
124
+ return;
125
+ }
126
+ if (!el.youtube) {
127
+ setupYoutubePlayer(el);
128
+ return;
129
+ }
130
+ el.youtube.playVideo();
157
131
  }
158
-
159
132
  function destroyPlayer(el) {
160
- if (el.youtube) {
161
- var playerEl = el.querySelector('[data-youtube-container]');
162
-
163
- playerEl.parentNode.removeChild(playerEl);
164
- el.youtube.destroy();
165
- el.youtube = null;
166
- }
167
-
168
- el.getElementsByTagName('img')[0].style.zIndex = null;
169
- el.getElementsByTagName('button')[0].style.display = null;
133
+ if (el.youtube) {
134
+ const playerEl = el.querySelector('[data-youtube-container]');
135
+ playerEl.parentNode.removeChild(playerEl);
136
+ el.youtube.destroy();
137
+ el.youtube = null;
138
+ }
139
+ el.getElementsByTagName('img')[0].style.zIndex = null;
140
+ el.getElementsByTagName('button')[0].style.display = null;
170
141
  }
171
-
172
142
  function setupPlayers(container) {
173
- var players = container.querySelectorAll('[data-youtube]');
174
-
175
- if (!players.length) {
176
- return;
177
- }
178
-
179
- [].forEach.call(players, createCover);
143
+ const players = container.querySelectorAll('[data-youtube]');
144
+ if (!players.length) {
145
+ return;
146
+ }
147
+ [].forEach.call(players, createCover);
180
148
  }
181
-
182
- window.onYouTubeIframeAPIReady = function () {
183
- document.body.addEventListener('click', delegateClick);
149
+ window.onYouTubeIframeAPIReady = ()=>{
150
+ document.body.addEventListener('click', delegateClick);
184
151
  };
185
-
186
152
  setupPlayers(document);
187
-
188
- window.addEventListener('consent.onetrust', function (e) {
189
- consent = e.detail.includes('C0004');
190
-
191
- setupPlayers(document);
192
- });
153
+ window.addEventListener('consent.onetrust', (e)=>{
154
+ consent = e.detail.includes('C0004');
155
+ setupPlayers(document);
156
+ });
@@ -1,55 +1,42 @@
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
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6
-
7
- var Button = function () {
8
- function Button(button) {
9
- var disabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
10
-
11
- _classCallCheck(this, Button);
12
-
13
- this.button = button;
14
- this.disabled = disabled;
15
-
16
- this.build();
17
- }
18
-
19
- _createClass(Button, [{
20
- key: 'build',
21
- value: function build() {
22
- var className = this.button.classList.item(0);
23
- var html = '\n\t\t\t<svg class="icon ' + className + '__spinner">\n\t\t\t\t<use xlink:href="#icon-spinner-white"></use>\n\t\t\t</svg>\n\t\t';
24
-
25
- this.button.appendChild(document.createRange().createContextualFragment(html));
26
- }
27
- }, {
28
- key: 'isLoading',
29
- value: function isLoading() {
30
- return this.button.classList.contains('is-loading');
31
- }
32
- }, {
33
- key: 'start',
34
- value: function start() {
35
- if (this.disabled) {
36
- this.button.setAttribute('disabled', 'disabled');
37
- }
38
-
39
- this.button.classList.add('is-loading');
40
- }
41
- }, {
42
- key: 'stop',
43
- value: function stop() {
44
- if (this.disabled) {
45
- this.button.removeAttribute('disabled');
46
- }
47
-
48
- this.button.classList.remove('is-loading');
49
- }
50
- }]);
51
-
52
- return Button;
53
- }();
54
-
55
- module.exports = Button;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return _default;
9
+ }
10
+ });
11
+ class Button {
12
+ build() {
13
+ const className = this.button.classList.item(0);
14
+ const html = `
15
+ <svg class="icon ${className}__spinner">
16
+ <use xlink:href="#icon-spinner-white"></use>
17
+ </svg>
18
+ `;
19
+ this.button.appendChild(document.createRange().createContextualFragment(html));
20
+ }
21
+ isLoading() {
22
+ return this.button.classList.contains('is-loading');
23
+ }
24
+ start() {
25
+ if (this.disabled) {
26
+ this.button.setAttribute('disabled', 'disabled');
27
+ }
28
+ this.button.classList.add('is-loading');
29
+ }
30
+ stop() {
31
+ if (this.disabled) {
32
+ this.button.removeAttribute('disabled');
33
+ }
34
+ this.button.classList.remove('is-loading');
35
+ }
36
+ constructor(button, disabled = true){
37
+ this.button = button;
38
+ this.disabled = disabled;
39
+ this.build();
40
+ }
41
+ }
42
+ const _default = Button;
@@ -1,29 +1,25 @@
1
- 'use strict';
2
-
3
- var inputs = document.querySelectorAll('[type="file"]:not(.wpcf7-file)');
4
-
5
- Array.prototype.forEach.call(inputs, function (input) {
6
- var label = input.nextElementSibling;
7
- var labelText = label.firstElementChild;
8
- var labelVal = labelText.innerHTML;
9
- var removebutton = label.nextElementSibling;
10
-
11
- function handleFileName(e) {
12
- var fileName = '';
13
- if (this.files && this.files.length > 1) fileName = (this.getAttribute('data-multiple-caption') || '').replace('{count}', this.files.length);else fileName = e.target.value.split('\\').pop();
14
-
15
- if (fileName) labelText.innerHTML = fileName;else labelText.innerHTML = labelVal;
16
-
17
- removebutton.classList.remove('is-hidden');
18
- }
19
-
20
- input.addEventListener('change', handleFileName);
21
-
22
- removebutton.addEventListener('click', function () {
23
- var fileName = '';
24
- if (fileName) labelText.innerHTML = fileName;else labelText.innerHTML = labelVal;
25
- removebutton.classList.add('is-hidden');
26
- input.value = '';
27
- input.focus();
28
- });
29
- });
1
+ "use strict";
2
+ const inputs = document.querySelectorAll('[type="file"]:not(.wpcf7-file)');
3
+ Array.prototype.forEach.call(inputs, (input)=>{
4
+ const label = input.nextElementSibling;
5
+ const labelText = label.firstElementChild;
6
+ const labelVal = labelText.innerHTML;
7
+ const removebutton = label.nextElementSibling;
8
+ function handleFileName(e) {
9
+ let fileName = '';
10
+ if (this.files && this.files.length > 1) fileName = (this.getAttribute('data-multiple-caption') || '').replace('{count}', this.files.length);
11
+ else fileName = e.target.value.split('\\').pop();
12
+ if (fileName) labelText.innerHTML = fileName;
13
+ else labelText.innerHTML = labelVal;
14
+ removebutton.classList.remove('is-hidden');
15
+ }
16
+ input.addEventListener('change', handleFileName);
17
+ removebutton.addEventListener('click', ()=>{
18
+ const fileName = '';
19
+ if (fileName) labelText.innerHTML = fileName;
20
+ else labelText.innerHTML = labelVal;
21
+ removebutton.classList.add('is-hidden');
22
+ input.value = '';
23
+ input.focus();
24
+ });
25
+ });
@@ -1,31 +1,27 @@
1
- 'use strict';
2
-
3
- var fileInputs = document.querySelectorAll('input[data-id=fileInput]');
4
-
5
- Array.prototype.forEach.call(fileInputs, function (fileInput) {
6
- var filePreview = fileInput.previousElementSibling.firstElementChild;
7
- var label = fileInput.nextElementSibling;
8
- var removebutton = label.nextElementSibling;
9
-
10
- var validImgFormats = ['image/jpeg', 'image/png', 'image/gif'];
11
-
12
- function handleFileUpload(inputEvent) {
13
- var inputFile = inputEvent.target;
14
- var reader = new FileReader();
15
-
16
- if (validImgFormats.indexOf(inputFile.files[0].type) === -1) {
17
- console.warning('Välj en bildfil i något av följande filformat: .png, .jpg, and .gif.');
18
- }
19
-
20
- reader.readAsDataURL(inputFile.files[0]);
21
- reader.onload = function (readerEvent) {
22
- filePreview.src = readerEvent.target.result;
23
- };
24
-
25
- removebutton.addEventListener('click', function () {
26
- filePreview.src = '';
27
- });
28
- }
29
-
30
- fileInput.addEventListener('change', handleFileUpload, false);
31
- });
1
+ "use strict";
2
+ const fileInputs = document.querySelectorAll('input[data-id=fileInput]');
3
+ Array.prototype.forEach.call(fileInputs, (fileInput)=>{
4
+ const filePreview = fileInput.previousElementSibling.firstElementChild;
5
+ const label = fileInput.nextElementSibling;
6
+ const removebutton = label.nextElementSibling;
7
+ const validImgFormats = [
8
+ 'image/jpeg',
9
+ 'image/png',
10
+ 'image/gif'
11
+ ];
12
+ function handleFileUpload(inputEvent) {
13
+ const inputFile = inputEvent.target;
14
+ const reader = new FileReader();
15
+ if (validImgFormats.indexOf(inputFile.files[0].type) === -1) {
16
+ console.warning('Välj en bildfil i något av följande filformat: .png, .jpg, and .gif.');
17
+ }
18
+ reader.readAsDataURL(inputFile.files[0]);
19
+ reader.onload = (readerEvent)=>{
20
+ filePreview.src = readerEvent.target.result;
21
+ };
22
+ removebutton.addEventListener('click', ()=>{
23
+ filePreview.src = '';
24
+ });
25
+ }
26
+ fileInput.addEventListener('change', handleFileUpload, false);
27
+ });
@@ -1,12 +1,9 @@
1
- 'use strict';
2
-
3
- var element = document.querySelector('.grid-toggle');
4
-
1
+ "use strict";
2
+ const element = document.querySelector('.grid-toggle');
5
3
  function classToggle() {
6
- var body = document.querySelector('body');
7
- body.classList.toggle('baseline-grid');
4
+ const body = document.querySelector('body');
5
+ body.classList.toggle('baseline-grid');
8
6
  }
9
-
10
7
  if (element) {
11
- element.addEventListener('click', classToggle);
12
- }
8
+ element.addEventListener('click', classToggle);
9
+ }