@@ -11,7 +11,7 @@ export { Settings, unloads };
1111
1212new StyleTag ( "TidalTags" , unloads , styles ) ;
1313
14- observe ( unloads , 'div[data-test="tracklist-row"]' , async ( trackRow ) => {
14+ const updateTrackRow = async ( trackRow : Element ) => {
1515 if ( ! settings . displayQalityTags && ! settings . displayFormatColumns ) return ;
1616 const trackId = trackRow . getAttribute ( "data-track-id" ) ;
1717 if ( trackId == null ) return ;
@@ -21,7 +21,25 @@ observe(unloads, 'div[data-test="tracklist-row"]', async (trackRow) => {
2121
2222 if ( settings . displayQalityTags ) setQualityTags ( trackRow , mediaItem ) ;
2323 if ( settings . displayFormatColumns ) await setFormatColumns ( trackRow , mediaItem ) ;
24+ } ;
25+
26+ // Observe new tracklist rows
27+ observe ( unloads , 'div[data-test="tracklist-row"]' , updateTrackRow ) ;
28+
29+ // Observe data-track-id attribute changes (DOM recycling)
30+ const attrObserver = new MutationObserver ( ( mutations ) => {
31+ for ( const mutation of mutations ) {
32+ if ( mutation . type === "attributes" && mutation . attributeName === "data-track-id" ) {
33+ updateTrackRow ( mutation . target as Element ) ;
34+ }
35+ }
36+ } ) ;
37+ attrObserver . observe ( document . body , {
38+ subtree : true ,
39+ attributes : true ,
40+ attributeFilter : [ "data-track-id" ] ,
2441} ) ;
42+ unloads . add ( ( ) => attrObserver . disconnect ( ) ) ;
2543
2644MediaItem . onMediaTransition ( unloads , setFormatInfo ) ;
2745MediaItem . fromPlaybackContext ( ) . then ( setFormatInfo ) ;
0 commit comments