@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.
- package/dist/app.js +71 -0
- package/dist/assets/js/Events.js +43 -77
- package/dist/assets/js/RequestError.js +16 -31
- package/dist/assets/js/anchorScroll.js +22 -15
- package/dist/assets/js/charCounter.js +100 -142
- package/dist/assets/js/className.js +19 -20
- package/dist/assets/js/conditional.js +96 -152
- package/dist/assets/js/debounce.js +15 -22
- package/dist/assets/js/el.js +108 -159
- package/dist/assets/js/getCookieByName.js +13 -11
- package/dist/assets/js/hasCookieConsent.js +30 -40
- package/dist/assets/js/htmlTextLength.js +12 -10
- package/dist/assets/js/iconToggle.js +16 -20
- package/dist/assets/js/nodeAdded.js +40 -53
- package/dist/assets/js/objToQuery.js +25 -41
- package/dist/assets/js/offset.js +29 -25
- package/dist/assets/js/ot.js +10 -13
- package/dist/assets/js/parallax.js +23 -23
- package/dist/assets/js/queryToObj.js +16 -22
- package/dist/assets/js/readSpeakerHandling.js +26 -28
- package/dist/assets/js/request.js +43 -52
- package/dist/assets/js/responsivePosition.js +46 -74
- package/dist/assets/js/stringToNode.js +11 -10
- package/dist/assets/js/template.js +15 -21
- package/dist/assets/js/textToggle.js +19 -24
- package/dist/assets/js/track.js +14 -12
- package/dist/assets/js/uid.js +10 -6
- package/dist/assets/js/utmGenerator.js +27 -33
- package/dist/assets/js/validationMessage.js +18 -25
- package/dist/assets/js/youtube.js +134 -170
- package/dist/atoms/button/Button.js +42 -55
- package/dist/atoms/file/file.js +25 -29
- package/dist/atoms/file/filePreview.js +27 -31
- package/dist/atoms/grid-toggle/grid-toggle.js +6 -9
- package/dist/atoms/height-limiter/height-limiter.js +37 -50
- package/dist/atoms/password-toggle/password-toggle.js +9 -11
- package/dist/atoms/range/range.js +32 -39
- package/dist/atoms/textarea/rich-text.js +223 -205
- package/dist/atoms/tooltip/tooltip.js +13 -17
- package/dist/components.js +42 -77
- package/dist/focusTrap.js +66 -77
- package/dist/molecules/alert/alert.js +15 -20
- package/dist/molecules/context-menu/context-menu.js +11 -16
- package/dist/molecules/continue-video-guide/continue-video-guide.js +90 -101
- package/dist/molecules/cookie-disclaimer/cookie-disclaimer.js +24 -33
- package/dist/molecules/form/Form.js +242 -352
- package/dist/molecules/form/index.js +15 -14
- package/dist/molecules/glider/glider-course.js +62 -75
- package/dist/molecules/glider/glider-hero.js +88 -101
- package/dist/molecules/glider/glider.js +49 -45
- package/dist/molecules/modal/modal.js +256 -325
- package/dist/molecules/multi-select/multi-select.js +198 -304
- package/dist/molecules/natural-language-form/natural-language-form.js +32 -46
- package/dist/molecules/overview-navigation/overview-navigation.js +90 -141
- package/dist/molecules/share/share.js +15 -20
- package/dist/molecules/system-error/system-error.js +6 -9
- package/dist/organisms/accordion/accordion.js +44 -50
- package/dist/organisms/footer/footer.js +1 -1
- package/dist/organisms/haveibeenpwned/haveibeenpwned.js +17 -16
- package/dist/organisms/mailchimp/mailchimp.js +72 -89
- package/dist/organisms/map-box/map-box.js +3 -4
- package/dist/organisms/mega-menu/mega-menu.js +177 -212
- package/dist/organisms/podcast/podcast.js +192 -215
- package/dist/organisms/schedule/schedule-filter.js +9 -15
- package/dist/organisms/tabs/tabs.js +194 -253
- package/dist/organisms/timeline/openTimelineItem.js +38 -51
- package/dist/organisms/timeline/timeline.js +111 -128
- package/dist/organisms/video-guide/VideoGuidePlayback.js +210 -286
- package/dist/organisms/video-guide/VideoGuideSubtitles.js +57 -80
- package/dist/organisms/video-guide/VideoGuideTimeline.js +74 -108
- package/dist/organisms/video-guide/getCurrentCueIndex.js +11 -9
- package/dist/organisms/video-guide/video-guide.js +66 -103
- package/dist/utilities/tab-highlighting/tab-highlighting.js +14 -22
- package/dist/vendor/toggle/a11y.toggle-switcher.js +10 -16
- package/package.json +78 -99
- package/src/app.js +5 -5
- package/src/assets/js/anchorScroll.js +1 -1
- package/src/assets/js/offset.js +1 -1
- package/src/atoms/button/Button.js +1 -1
- package/src/atoms/icon/richtext-ordered-list.svg +1 -1
- package/src/atoms/icon/sprite.svg +6 -5
- package/src/molecules/glider/glider-course.js +0 -2
- package/src/molecules/glider/glider.js +2 -2
- package/src/organisms/accordion/accordion.js +1 -2
- package/src/organisms/timeline/timeline.js +2 -3
- package/dist/atoms/timeline/anchorScroll.js +0 -13
- package/dist/atoms/toggle-high-contrast/toggle-high-contrast.js +0 -12
- package/dist/molecules/glider/glider-single.js +0 -68
- package/dist/molecules/modal/modal-graph.js +0 -40
- package/dist/molecules/timeline-navigation/timeline-navigation.js +0 -34
- /package/src/atoms/icon/{heading-3.svg → richtext-heading-3.svg} +0 -0
- /package/src/molecules/alert/{_alert.scss → alert.scss} +0 -0
|
@@ -1,192 +1,156 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// TODO: Should probably implement a way to localize texts in the styleguide
|
|
2
|
+
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
4
|
+
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
183
|
-
document.body.addEventListener('click', delegateClick);
|
|
149
|
+
window.onYouTubeIframeAPIReady = ()=>{
|
|
150
|
+
document.body.addEventListener('click', delegateClick);
|
|
184
151
|
};
|
|
185
|
-
|
|
186
152
|
setupPlayers(document);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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;
|
package/dist/atoms/file/file.js
CHANGED
|
@@ -1,29 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
var element = document.querySelector('.grid-toggle');
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
const element = document.querySelector('.grid-toggle');
|
|
5
3
|
function classToggle() {
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const body = document.querySelector('body');
|
|
5
|
+
body.classList.toggle('baseline-grid');
|
|
8
6
|
}
|
|
9
|
-
|
|
10
7
|
if (element) {
|
|
11
|
-
|
|
12
|
-
}
|
|
8
|
+
element.addEventListener('click', classToggle);
|
|
9
|
+
}
|