@internetstiftelsen/styleguide 2.24.10 → 2.24.12-beta.0.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.
@@ -28,14 +28,6 @@ function onPlayerStateChange(el, e) {
28
28
  } else if (e.data === YT.PlayerState.UNSTARTED) {
29
29
  el.getElementsByTagName('img')[0].style.zIndex = null;
30
30
  el.getElementsByTagName('button')[0].style.display = null;
31
-
32
- if (el.youtube) {
33
- var playerEl = el.querySelector('[data-youtube-container]');
34
-
35
- playerEl.parentNode.removeChild(playerEl);
36
- el.youtube.destroy();
37
- el.youtube = null;
38
- }
39
31
  }
40
32
  }
41
33
 
@@ -16,6 +16,7 @@ var stepBackward = document.querySelector('.js-step-backward');
16
16
  var playButton = document.querySelector('.js-play-button');
17
17
  var playIcon = document.querySelector('.js-play-icon');
18
18
  var pauseIcon = document.querySelector('.js-pause-icon');
19
+ var closeButton = document.querySelector('.js-close-player');
19
20
  var rssURL = '';
20
21
 
21
22
  if (podCast) {
@@ -30,7 +31,6 @@ if (!namespaceElement) {
30
31
 
31
32
  function timeupdate() {
32
33
  audio.addEventListener('timeupdate', function () {
33
- var timeleft = timeleftElement;
34
34
  var duration = parseInt(audio.duration, 10);
35
35
  var currentTime = parseInt(audio.currentTime, 10);
36
36
  var timeLeft = duration - currentTime;
@@ -44,7 +44,7 @@ function timeupdate() {
44
44
 
45
45
  if (timeLeft > 0) {
46
46
  timeleftElement.classList.remove('u-visibility-hidden');
47
- timeleft.innerHTML = m + ':' + s;
47
+ timeleftElement.innerHTML = m + ':' + s;
48
48
  }
49
49
  }, false);
50
50
  }
@@ -52,7 +52,7 @@ function timeupdate() {
52
52
  var html = '';
53
53
 
54
54
  function getItems(el) {
55
- html += '\n\t<li>\n\t\t<button\n\t\t\tclass="' + namespace + 'o-podcast-player__button display-flex js-play-episode"\n\t\t\tdata-src="' + el.querySelector('enclosure').getAttribute('url') + '"\n\t\t\tdata-title="' + el.querySelector('title').innerHTML + '"\n\t\t\tdata-description="' + el.querySelector('description').innerHTML.replace(/(<([^>]+)>)/gi, '').replace('<![CDATA[', '').replace(']]>', '') + '"\n\t\t\tdata-image="' + el.querySelector('image').getAttribute('href') + '"\n\t\t\tdata-duration="' + el.querySelector('duration').innerHTML + '"\n\t\t\ttype="button"><svg class="icon ' + namespace + 'o-podcast-player__play-icon u-m-r-2"><use xlink:href="#icon-play"></use></svg></div><div class="u-visuallyhidden">Spela avsnittet ' + el.querySelector('title').innerHTML + '</div></button>\n\t\t<div class="' + namespace + 'o-podcast-player__show-info">\n\t\t\t<div class="' + namespace + 'o-podcast-player__title">' + el.querySelector('title').innerHTML + '</div>\n\t\t\t<div class="' + namespace + 'o-podcast-player__description">' + el.querySelector('description').innerHTML + '</div>\n\t\t</div>\n\t</li>\n';
55
+ html += '\n\t<li>\n\t\t<button\n\t\t\tclass="' + namespace + 'o-podcast-player__button display-flex js-play-episode"\n\t\t\tdata-src="' + el.querySelector('enclosure').getAttribute('url') + '"\n\t\t\tdata-title="' + el.querySelector('title').innerHTML + '"\n\t\t\tdata-description="' + el.querySelector('description').innerHTML.replace(/(<([^>]+)>)/gi, '').replace('<![CDATA[', '').replace(']]>', '') + '"\n\t\t\tdata-image="' + el.querySelector('image').getAttribute('href') + '"\n\t\t\tdata-duration="' + el.querySelector('duration').innerHTML + '"\n\t\t\ttype="button"><svg class="icon ' + namespace + 'o-podcast-player__play-icon u-m-r-2"><use xlink:href="#icon-play"></use></svg></div><div class="u-visuallyhidden">Spela avsnittet ' + el.querySelector('title').innerHTML + '</div></button>\n\t\t<div class="' + namespace + 'o-podcast-player__show-info">\n\t\t\t<div class="' + namespace + 'o-podcast-player__title">' + el.querySelector('title').innerHTML + '</div>\n\t\t\t<div class="' + namespace + 'o-podcast-player__description js-description">' + el.querySelector('description').innerHTML + '</div>\n\t\t</div>\n\t</li>\n';
56
56
 
57
57
  if (jsTrackList) {
58
58
  jsTrackList.innerHTML = html;
@@ -107,6 +107,7 @@ document.body.addEventListener('click', function (e) {
107
107
  if (playButton) {
108
108
  playButton.addEventListener('click', function () {
109
109
  if (audio.paused) {
110
+ audio.muted = false;
110
111
  audio.play();
111
112
  pauseIcon.classList.remove('is-hidden');
112
113
  playIcon.classList.add('is-hidden');
@@ -146,4 +147,85 @@ if (stepBackward) {
146
147
  audio.currentTime -= 15;
147
148
  timeupdate();
148
149
  });
150
+ }
151
+
152
+ // Handle continous play when user leaves the page
153
+ window.addEventListener('unload', function () {
154
+ var podcastData = {
155
+ podCastTitle: title.innerHTML,
156
+ episodeDescription: description.innerHTML,
157
+ episodeSrc: audio.src,
158
+ episodeCurrentTime: audio.currentTime,
159
+ episodeDuration: durationElement.innerHTML,
160
+ episodeImage: image.src
161
+ };
162
+ localStorage.setItem('episodeData', JSON.stringify(podcastData));
163
+
164
+ if (!audio.paused) {
165
+ var existing = localStorage.getItem('episodeData');
166
+ existing = existing ? JSON.parse(existing) : {};
167
+ existing.podcastWasPlaying = true;
168
+ localStorage.setItem('episodeData', JSON.stringify(existing));
169
+ } else {
170
+ var _existing = localStorage.getItem('episodeData');
171
+ _existing = _existing ? JSON.parse(_existing) : {};
172
+ _existing.podcastWasPlaying = false;
173
+ localStorage.setItem('episodeData', JSON.stringify(_existing));
174
+ }
175
+ });
176
+
177
+ if (localStorage.getItem('episodeData') && podCast) {
178
+ var arr = JSON.parse(localStorage.getItem('episodeData'));
179
+
180
+ if (arr.episodeCurrentTime) {
181
+ podCast.classList.remove(namespace + 'o-podcast-player--hidden');
182
+ audio.src = arr.episodeSrc;
183
+ image.src = arr.episodeImage;
184
+ title.innerHTML = arr.podCastTitle;
185
+ description.innerHTML = arr.episodeDescription;
186
+ durationElement.innerHTML = arr.episodeDuration;
187
+
188
+ if (arr.podcastWasPlaying === true) {
189
+ var playPromise = audio.play();
190
+
191
+ if (playPromise !== undefined) {
192
+ playPromise.then(function () {
193
+ // Continue playing audio on reload
194
+ audio.currentTime = arr.episodeCurrentTime;
195
+ timeupdate();
196
+ audio.play();
197
+ pauseIcon.classList.remove('is-hidden');
198
+ playIcon.classList.add('is-hidden');
199
+ }).catch(function () {
200
+ // User reloaded page manually. Cannot play audio
201
+ audio.addEventListener('loadedmetadata', function () {
202
+ audio.currentTime = arr.episodeCurrentTime;
203
+ timeupdate();
204
+ });
205
+
206
+ pauseIcon.classList.add('is-hidden');
207
+ playIcon.classList.remove('is-hidden');
208
+ audio.pause();
209
+ });
210
+ }
211
+ } else {
212
+ audio.addEventListener('loadedmetadata', function () {
213
+ audio.currentTime = arr.episodeCurrentTime;
214
+ timeupdate();
215
+ });
216
+ pauseIcon.classList.add('is-hidden');
217
+ playIcon.classList.remove('is-hidden');
218
+ audio.pause();
219
+ }
220
+ }
221
+ }
222
+
223
+ if (closeButton) {
224
+ closeButton.addEventListener('click', function () {
225
+ audio.currentTime = 0;
226
+ timeupdate();
227
+ audio.pause();
228
+ localStorage.removeItem('episodeData');
229
+ podCast.classList.add(namespace + 'o-podcast-player--hidden');
230
+ });
149
231
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@internetstiftelsen/styleguide",
3
- "version": "2.24.10",
3
+ "version": "2.24.12-beta.0.1",
4
4
  "main": "dist/components.js",
5
5
  "ports": {
6
6
  "fractal": "3000"
@@ -59,7 +59,7 @@
59
59
  "css-loader": "^5.2.6",
60
60
  "cssnano": "^5.0.6",
61
61
  "eslint": "^7.28.0",
62
- "imagemin-cli": "^6.0.0",
62
+ "imagemin-cli": "^7.0.0",
63
63
  "onchange": "^6.1.0",
64
64
  "postcss-class-prefix": "^0.3.0",
65
65
  "postcss-cli": "^8.3.1",
@@ -17,7 +17,7 @@
17
17
  flex-shrink: 0;
18
18
  width: $icon-size-small;
19
19
  height: $icon-size-small;
20
- margin-top: rem(5px);
20
+ margin-top: rem(3px);
21
21
  margin-right: rhythm(1);
22
22
  border: 1px solid $color-cyberspace;
23
23
  border-radius: $border-radius;
@@ -42,7 +42,7 @@
42
42
  content: '';
43
43
  display: block;
44
44
  position: absolute;
45
- top: rem(12.5px);
45
+ top: rem(10.5px);
46
46
  left: rem(6px);
47
47
  width: rem(5px);
48
48
  height: rem(9px);
@@ -17,7 +17,7 @@
17
17
  flex-shrink: 0;
18
18
  width: rem(15px);
19
19
  height: rem(15px);
20
- margin-top: rem(5px);
20
+ margin-top: rem(3px);
21
21
  margin-right: rhythm(1);
22
22
  transform: translateX(rem(1px));
23
23
  border: 2px solid transparent;
@@ -60,6 +60,18 @@
60
60
  margin-bottom: 0;
61
61
  color: $color-ruby;
62
62
  font-family: $font-family-headings;
63
+ overflow: hidden;
64
+ text-overflow: ellipsis;
65
+ white-space: nowrap;
66
+ max-width: rem(200px);
67
+
68
+ @include bp-up(sm) {
69
+ max-width: rem(250px);
70
+ }
71
+
72
+ @include bp-up(lg) {
73
+ max-width: rem(500px);
74
+ }
63
75
  }
64
76
 
65
77
  @include e(description) {
@@ -74,7 +86,7 @@
74
86
  }
75
87
 
76
88
  @include bp-up(sm) {
77
- max-width: rem(280px);
89
+ max-width: rem(250px);
78
90
  }
79
91
 
80
92
  @include bp-up(lg) {
@@ -82,16 +94,23 @@
82
94
  }
83
95
  }
84
96
 
97
+ @include e(playtime) {
98
+ @include bp-between(sm, md) {
99
+ display: none;
100
+ }
101
+ }
102
+
103
+ @include e(spacer) {
104
+ @include bp-between(sm, md) {
105
+ display: none;
106
+ }
107
+ }
108
+
85
109
  @include e(controls) {
86
110
  display: flex;
87
111
  flex-grow: 1;
88
112
  align-items: center;
89
113
  justify-content: center;
90
- transform: translateX(math.div($time-left-width, 2));
91
-
92
- @include bp-up(sm) {
93
- transform: translateX(0);
94
- }
95
114
  }
96
115
 
97
116
  @include e(spacer) {
@@ -146,4 +165,15 @@
146
165
  height: rhythm(1);
147
166
  }
148
167
  }
168
+
169
+ @include e(close) {
170
+ position: absolute;
171
+ right: rhythm(0.5);
172
+ top: 50%;
173
+ transform: translateY(-50%);
174
+
175
+ @include bp-up(xxl) {
176
+ right: rhythm(2);
177
+ }
178
+ }
149
179
  }
@@ -14,6 +14,7 @@ const stepBackward = document.querySelector('.js-step-backward');
14
14
  const playButton = document.querySelector('.js-play-button');
15
15
  const playIcon = document.querySelector('.js-play-icon');
16
16
  const pauseIcon = document.querySelector('.js-pause-icon');
17
+ const closeButton = document.querySelector('.js-close-player');
17
18
  let rssURL = '';
18
19
 
19
20
  if (podCast) {
@@ -28,7 +29,6 @@ if (!namespaceElement) {
28
29
 
29
30
  function timeupdate() {
30
31
  audio.addEventListener('timeupdate', () => {
31
- const timeleft = timeleftElement;
32
32
  const duration = parseInt(audio.duration, 10);
33
33
  const currentTime = parseInt(audio.currentTime, 10);
34
34
  const timeLeft = duration - currentTime;
@@ -43,7 +43,7 @@ function timeupdate() {
43
43
 
44
44
  if (timeLeft > 0) {
45
45
  timeleftElement.classList.remove('u-visibility-hidden');
46
- timeleft.innerHTML = `${m}:${s}`;
46
+ timeleftElement.innerHTML = `${m}:${s}`;
47
47
  }
48
48
  }, false);
49
49
  }
@@ -63,7 +63,7 @@ function getItems(el) {
63
63
  type="button"><svg class="icon ${namespace}o-podcast-player__play-icon u-m-r-2"><use xlink:href="#icon-play"></use></svg></div><div class="u-visuallyhidden">Spela avsnittet ${el.querySelector('title').innerHTML}</div></button>
64
64
  <div class="${namespace}o-podcast-player__show-info">
65
65
  <div class="${namespace}o-podcast-player__title">${el.querySelector('title').innerHTML}</div>
66
- <div class="${namespace}o-podcast-player__description">${el.querySelector('description').innerHTML}</div>
66
+ <div class="${namespace}o-podcast-player__description js-description">${el.querySelector('description').innerHTML}</div>
67
67
  </div>
68
68
  </li>
69
69
  `;
@@ -120,6 +120,7 @@ document.body.addEventListener('click', (e) => {
120
120
  if (playButton) {
121
121
  playButton.addEventListener('click', () => {
122
122
  if (audio.paused) {
123
+ audio.muted = false;
123
124
  audio.play();
124
125
  pauseIcon.classList.remove('is-hidden');
125
126
  playIcon.classList.add('is-hidden');
@@ -160,3 +161,84 @@ if (stepBackward) {
160
161
  timeupdate();
161
162
  });
162
163
  }
164
+
165
+ // Handle continous play when user leaves the page
166
+ window.addEventListener('unload', () => {
167
+ const podcastData = {
168
+ podCastTitle: title.innerHTML,
169
+ episodeDescription: description.innerHTML,
170
+ episodeSrc: audio.src,
171
+ episodeCurrentTime: audio.currentTime,
172
+ episodeDuration: durationElement.innerHTML,
173
+ episodeImage: image.src,
174
+ };
175
+ localStorage.setItem('episodeData', JSON.stringify(podcastData));
176
+
177
+ if (!audio.paused) {
178
+ let existing = localStorage.getItem('episodeData');
179
+ existing = existing ? JSON.parse(existing) : {};
180
+ existing.podcastWasPlaying = true;
181
+ localStorage.setItem('episodeData', JSON.stringify(existing));
182
+ } else {
183
+ let existing = localStorage.getItem('episodeData');
184
+ existing = existing ? JSON.parse(existing) : {};
185
+ existing.podcastWasPlaying = false;
186
+ localStorage.setItem('episodeData', JSON.stringify(existing));
187
+ }
188
+ });
189
+
190
+ if (localStorage.getItem('episodeData') && podCast) {
191
+ const arr = JSON.parse(localStorage.getItem('episodeData'));
192
+
193
+ if (arr.episodeCurrentTime) {
194
+ podCast.classList.remove(`${namespace}o-podcast-player--hidden`);
195
+ audio.src = arr.episodeSrc;
196
+ image.src = arr.episodeImage;
197
+ title.innerHTML = arr.podCastTitle;
198
+ description.innerHTML = arr.episodeDescription;
199
+ durationElement.innerHTML = arr.episodeDuration;
200
+
201
+ if (arr.podcastWasPlaying === true) {
202
+ const playPromise = audio.play();
203
+
204
+ if (playPromise !== undefined) {
205
+ playPromise.then(() => {
206
+ // Continue playing audio on reload
207
+ audio.currentTime = arr.episodeCurrentTime;
208
+ timeupdate();
209
+ audio.play();
210
+ pauseIcon.classList.remove('is-hidden');
211
+ playIcon.classList.add('is-hidden');
212
+ }).catch(() => {
213
+ // User reloaded page manually. Cannot play audio
214
+ audio.addEventListener('loadedmetadata', () => {
215
+ audio.currentTime = arr.episodeCurrentTime;
216
+ timeupdate();
217
+ });
218
+
219
+ pauseIcon.classList.add('is-hidden');
220
+ playIcon.classList.remove('is-hidden');
221
+ audio.pause();
222
+ });
223
+ }
224
+ } else {
225
+ audio.addEventListener('loadedmetadata', () => {
226
+ audio.currentTime = arr.episodeCurrentTime;
227
+ timeupdate();
228
+ });
229
+ pauseIcon.classList.add('is-hidden');
230
+ playIcon.classList.remove('is-hidden');
231
+ audio.pause();
232
+ }
233
+ }
234
+ }
235
+
236
+ if (closeButton) {
237
+ closeButton.addEventListener('click', () => {
238
+ audio.currentTime = 0;
239
+ timeupdate();
240
+ audio.pause();
241
+ localStorage.removeItem('episodeData');
242
+ podCast.classList.add(`${namespace}o-podcast-player--hidden`);
243
+ });
244
+ }
@@ -5,7 +5,7 @@ module.exports = {
5
5
  alt: 'Hands typing on laptop',
6
6
  img_url: '/assets/images/ALX_0876.jpg',
7
7
  title: 'Gymnasieskolor med hög bandbredd har bättre skolresultat',
8
- url: 'http://www.google.se',
8
+ url: '/components/preview/magazine',
9
9
  exerpt: 'Eget nulla <strong>facilisi etiam</strong> dignissim diam quis enim lobortis scelerisque. Faucibus a pellentesque sit amet porttitor.',
10
10
  is_padded: true,
11
11
  is_wide: false,