Skip to content

Commit 23a56b4

Browse files
committed
Add parsing of video playlists.
1 parent c5517c6 commit 23a56b4

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

src/assets/js/media.js

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,20 @@ if ( 0 !== ableplayer_selectors.length ) {
3838
}
3939

4040
if ( 'true' === ableplayer.settings.replace_playlists) {
41-
const audioPlaylists = document.querySelectorAll( '.wp-audio-playlist' );
42-
if ( audioPlaylists.length > 0 ) {
43-
audioPlaylists.forEach((playlist,index,listObj) => {
44-
renderPlaylist( playlist, index );
41+
const playlists = document.querySelectorAll( '.wp-playlist' );
42+
if ( playlists.length > 0 ) {
43+
playlists.forEach((playlist,index,listObj) => {
44+
renderPlaylist( playlist );
4545
});
4646
}
4747
}
4848

49-
function renderPlaylist( el, index ) {
49+
/**
50+
* Render the AblePlayer playlist over WP Playlist data sources.
51+
*
52+
* @param Element el Playlist wrapper element.
53+
*/
54+
function renderPlaylist( el ) {
5055
let contents = JSON.parse( el.querySelector( '.wp-playlist-script' ).textContent );
5156
let player = ( el.classList.contains( 'wp-audio-playlist' ) ) ? el.querySelector( 'audio' ) : el.querySelector( 'video' );
5257
let tracks = contents.tracks;
@@ -57,20 +62,32 @@ function renderPlaylist( el, index ) {
5762
let listItem, source, button;
5863
tracks.forEach((track,index,listObj) => {
5964
listItem = document.createElement( 'li' );
65+
listItem.setAttribute( 'data-poster', track.image.src );
6066
source = document.createElement( 'span' );
6167
source.classList.add( 'able-source' );
6268
source.setAttribute( 'data-type', track.type );
6369
source.setAttribute( 'data-src', track.src );
6470
button = document.createElement( 'button' );
6571
button.setAttribute( 'type', 'button' );
6672
button.innerText = track.title;
73+
if ( track.image.src ) {
74+
img = document.createElement( 'img' );
75+
img.setAttribute( 'src', track.image.src );
76+
img.setAttribute( 'alt', '' );
77+
img.setAttribute( 'height', track.image.height );
78+
img.setAttribute( 'width', track.image.width );
79+
button.insertAdjacentElement( 'afterbegin', img );
80+
}
6781
listItem.insertAdjacentElement( 'afterbegin', source );
6882
listItem.insertAdjacentElement( 'beforeend', button );
6983
list.insertAdjacentElement( 'beforeend', listItem );
7084
});
7185
el.insertAdjacentElement( 'beforeend', list );
7286

73-
el.querySelector( '.wp-playlist-current-item' ).remove();
87+
let wpCurrent = el.querySelector( '.wp-playlist-current-item' );
88+
if ( wpCurrent ) {
89+
wpCurrent.remove();
90+
}
7491
}
7592

7693
const ablePlayers = document.querySelectorAll( '[data-able-player]' );

0 commit comments

Comments
 (0)