@@ -72,17 +72,40 @@ function toDataURL(url, callback) {
7272 return resp ;
7373 }
7474
75+ var messageSelector = "[data-testid='chatline'], .mixcloud-live-chat-row" ;
76+ var chatContainerSelector = ".mixcloud-live-chat-container, .mixcloud-live-chat-chat-window" ;
77+
7578 function getMessageElement ( ele ) {
7679 if ( ! ele || ele . nodeType !== 1 ) { return null ; }
77- if ( ele . matches && ( ele . matches ( "[data-testid='chatline']" ) || ele . matches ( ".mixcloud-live-chat-row" ) ) ) {
80+ if ( ele . matches && ele . matches ( messageSelector ) ) {
7881 return ele ;
7982 }
83+ if ( ele . closest ) {
84+ var parentMessage = ele . closest ( messageSelector ) ;
85+ if ( parentMessage ) {
86+ return parentMessage ;
87+ }
88+ }
8089 if ( ele . querySelector ) {
81- return ele . querySelector ( "[data-testid='chatline'], .mixcloud-live-chat-row" ) ;
90+ return ele . querySelector ( messageSelector ) ;
8291 }
8392 return null ;
8493 }
8594
95+ function getChatContainerFromRow ( row ) {
96+ if ( ! row || ! row . parentElement ) { return null ; }
97+ var parent = row . parentElement ;
98+ while ( parent && parent !== document . body ) {
99+ try {
100+ if ( parent . querySelectorAll ( messageSelector ) . length > 1 ) {
101+ return parent ;
102+ }
103+ } catch ( e ) { }
104+ parent = parent . parentElement ;
105+ }
106+ return row . parentElement ;
107+ }
108+
86109 function getProfileLink ( ele ) {
87110 var links = ele . querySelectorAll ( "a[href]" ) ;
88111 for ( var i = 0 ; i < links . length ; i ++ ) {
@@ -346,7 +369,7 @@ function toDataURL(url, callback) {
346369 processMessage ( node ) ;
347370 }
348371 if ( node . querySelectorAll ) {
349- var rows = node . querySelectorAll ( "[data-testid='chatline'], .mixcloud-live-chat-row" ) ;
372+ var rows = node . querySelectorAll ( messageSelector ) ;
350373 for ( var j = 0 ; j < rows . length ; j ++ ) {
351374 processMessage ( rows [ j ] ) ;
352375 }
@@ -366,7 +389,7 @@ function toDataURL(url, callback) {
366389 }
367390 } ) ;
368391 } ;
369- var existingRows = target . querySelectorAll ( "[data-testid='chatline'], .mixcloud-live-chat-row" ) ;
392+ var existingRows = target . querySelectorAll ( messageSelector ) ;
370393 for ( var i = 0 ; i < existingRows . length ; i ++ ) {
371394 existingRows [ i ] . marked = true ;
372395 }
@@ -383,10 +406,18 @@ function toDataURL(url, callback) {
383406 observeChatContainer ( targets [ i ] ) ;
384407 }
385408 }
409+
410+ function observeDiscoveredChatContainers ( ) {
411+ var rows = document . querySelectorAll ( messageSelector ) ;
412+ for ( var i = 0 ; i < rows . length ; i ++ ) {
413+ observeChatContainer ( getChatContainerFromRow ( rows [ i ] ) ) ;
414+ }
415+ }
386416 console . log ( "social stream injected" ) ;
387417
388418 setInterval ( function ( ) {
389- onElementInserted ( ".mixcloud-live-chat-container, .mixcloud-live-chat-chat-window" ) ;
419+ onElementInserted ( chatContainerSelector ) ;
420+ observeDiscoveredChatContainers ( ) ;
390421 } , 1000 ) ;
391422
392423} ) ( ) ;
0 commit comments