@@ -11,7 +11,9 @@ if ( 0 !== ableplayer_selectors.length ) {
1111 if ( mediaEls ) {
1212 mediaEls . forEach ( ( el , index , listObj ) => {
1313 let excludeClass = ableplayer . settings . exclude_class ;
14- if ( excludeClass !== '' && el . classList . contains ( excludeClass ) || el . closest ( 'figure' ) . classList . contains ( excludeClass ) ) {
14+ let parentEl = el . closest ( 'figure' ) ;
15+ let parentHasClass = ( parentEl ) ? parentEl . classList . contains ( excludeClass ) : false ;
16+ if ( excludeClass !== '' && el . classList . contains ( excludeClass ) || parentHasClass ) {
1517 el . classList . add ( 'ableplayer-skipped' ) ;
1618 } else {
1719 el . removeAttribute ( 'controls' ) ;
@@ -32,6 +34,42 @@ if ( 0 !== ableplayer_selectors.length ) {
3234 }
3335}
3436
37+ if ( 'true' === ableplayer . settings . replace_playlists ) {
38+ const audioPlaylists = document . querySelectorAll ( '.wp-audio-playlist' ) ;
39+ if ( audioPlaylists . length > 0 ) {
40+ audioPlaylists . forEach ( ( playlist , index , listObj ) => {
41+ renderPlaylist ( playlist , index ) ;
42+ } ) ;
43+ }
44+ }
45+
46+ function renderPlaylist ( el , index ) {
47+ let contents = JSON . parse ( el . querySelector ( '.wp-playlist-script' ) . textContent ) ;
48+ let player = ( el . classList . contains ( 'wp-audio-playlist' ) ) ? el . querySelector ( 'audio' ) : el . querySelector ( 'video' ) ;
49+ let tracks = contents . tracks ;
50+ let list = document . createElement ( 'ul' ) ;
51+ list . classList . add ( 'able-playlist' ) ;
52+ list . setAttribute ( 'data-player' , player . getAttribute ( 'id' ) ) ;
53+ list . setAttribute ( 'data-embedded' , true ) ;
54+ let listItem , source , button ;
55+ tracks . forEach ( ( track , index , listObj ) => {
56+ listItem = document . createElement ( 'li' ) ;
57+ source = document . createElement ( 'span' ) ;
58+ source . classList . add ( 'able-source' ) ;
59+ source . setAttribute ( 'data-type' , track . type ) ;
60+ source . setAttribute ( 'data-src' , track . src ) ;
61+ button = document . createElement ( 'button' ) ;
62+ button . setAttribute ( 'type' , 'button' ) ;
63+ button . innerText = track . title ;
64+ listItem . insertAdjacentElement ( 'afterbegin' , source ) ;
65+ listItem . insertAdjacentElement ( 'beforeend' , button ) ;
66+ list . insertAdjacentElement ( 'beforeend' , listItem ) ;
67+ } ) ;
68+ el . insertAdjacentElement ( 'beforeend' , list ) ;
69+
70+ el . querySelector ( '.wp-playlist-current-item' ) . remove ( ) ;
71+ }
72+
3573const ablePlayers = document . querySelectorAll ( '[data-able-player]' ) ;
3674if ( ablePlayers ) {
3775 ablePlayers . forEach ( ( el , index , listObj ) => {
0 commit comments