|
332 | 332 | for (let video of dom.querySelectorAll('video')) { |
333 | 333 | let videoId = video.getAttribute('data-smartui-element-id'); |
334 | 334 | let cloneEl = clone.querySelector(`[data-smartui-element-id="${videoId}"]`); |
335 | | - // if the video already has a poster image, no work for us to do |
336 | | - if (video.getAttribute('poster')) { |
337 | | - cloneEl.removeAttribute('src'); |
338 | | - continue; |
339 | | - } |
340 | | - let canvas = document.createElement('canvas'); |
341 | | - let width = canvas.width = video.videoWidth; |
342 | | - let height = canvas.height = video.videoHeight; |
343 | | - let dataUrl; |
344 | | - canvas.getContext('2d').drawImage(video, 0, 0, width, height); |
345 | | - try { |
346 | | - dataUrl = canvas.toDataURL(); |
347 | | - } catch (e) { |
348 | | - warnings.add(`data-smartui-element-id="${videoId}" : ${e.toString()}`); |
349 | | - } |
350 | 335 |
|
351 | | - // if the canvas produces a blank image, skip |
352 | | - if (!dataUrl || dataUrl === 'data:,') continue; |
| 336 | + // remove video sources |
| 337 | + cloneEl.removeAttribute('src'); |
| 338 | + const sourceEls = cloneEl.querySelectorAll('source'); |
| 339 | + if (sourceEls.length) sourceEls.forEach((sourceEl) => sourceEl.remove()); |
| 340 | + |
| 341 | + // if the video doesn't have a poster image |
| 342 | + if (!video.getAttribute('poster')) { |
| 343 | + let canvas = document.createElement('canvas'); |
| 344 | + let width = canvas.width = video.videoWidth; |
| 345 | + let height = canvas.height = video.videoHeight; |
| 346 | + let dataUrl; |
| 347 | + canvas.getContext('2d').drawImage(video, 0, 0, width, height); |
| 348 | + try { |
| 349 | + dataUrl = canvas.toDataURL(); |
| 350 | + } catch (e) { |
| 351 | + warnings.add(`data-smartui-element-id="${videoId}" : ${e.toString()}`); |
| 352 | + } |
353 | 353 |
|
354 | | - // create a resource from the serialized data url |
355 | | - // let resource = resourceFromDataURL(videoId, dataUrl); |
356 | | - // resources.add(resource); |
| 354 | + // if the canvas produces a blank image, skip |
| 355 | + if (!dataUrl || dataUrl === 'data:,') continue; |
357 | 356 |
|
358 | | - // use a data attribute to avoid making a real request |
359 | | - cloneEl.removeAttribute('src'); |
360 | | - cloneEl.setAttribute('poster', dataUrl); |
| 357 | + // create a resource from the serialized data url |
| 358 | + let resource = resourceFromDataURL(videoId, dataUrl); |
| 359 | + resources.add(resource); |
| 360 | + |
| 361 | + // set poster attribute to resource url to avoid making a real request |
| 362 | + cloneEl.setAttribute('poster', resource.url); |
| 363 | + } |
361 | 364 | } |
362 | 365 | } |
363 | 366 |
|
|
0 commit comments