@@ -14,11 +14,18 @@ import Services from '../../../extension/service'
1414 * handle: "MisakaMirror"
1515 * }
1616 */
17- const parseNameArea = ( t : string ) => {
18- const r = regexMatch ( t , / ( ( .+ \s * ) * ) @ ( .+ ) / , null ) !
17+ const parseNameArea = ( nameArea : string ) => {
18+ const result = regexMatch ( nameArea , / ( [ ^ @ ] * ) @ ( .+ ) / , null )
19+
20+ if ( ! result ) {
21+ return {
22+ name : '' ,
23+ handle : '' ,
24+ }
25+ }
1926 return {
20- name : r [ 1 ] . replace ( / \n + / g, '' ) ,
21- handle : r [ 3 ] . replace ( / \n + / g, '' ) ,
27+ name : result [ 1 ] . replace ( / \n + / g, '' ) ,
28+ handle : result [ 2 ] . replace ( / \n + / g, '' ) ,
2229 }
2330}
2431
@@ -92,10 +99,25 @@ export const postNameParser = (node: HTMLElement) => {
9299 return parseNameArea ( notNullable ( node . querySelector < HTMLTableCellElement > ( '.user-info' ) ) . innerText )
93100 } else {
94101 const tweetElement = node . querySelector ( '[data-testid="tweet"]' ) ?? node
95- const nameInNoramlTweet = tweetElement . children [ 1 ] ?. querySelector < HTMLAnchorElement > ( 'a' ) ?. innerText
102+ const nameInUniqueAnchorTweet =
103+ tweetElement . children [ 1 ] ?. querySelector < HTMLAnchorElement > ( 'a[aria-haspopup="false"]' ) ?. innerText ?? ''
104+ const nameInDoubleAnchorsTweet = Array . from (
105+ tweetElement . children [ 1 ] ?. querySelectorAll < HTMLAnchorElement > ( 'a[aria-haspopup="false"]' ) ?? [ ] ,
106+ )
107+ . map ( a => a . textContent )
108+ . join ( '' )
96109 const nameInQuoteTweet = tweetElement . children [ 0 ] ?. querySelector < HTMLDivElement > ( '[aria-haspopup="false"]' )
97110 ?. innerText
98- return parseNameArea ( notNullable ( nameInNoramlTweet || nameInQuoteTweet ) )
111+
112+ return (
113+ [ nameInUniqueAnchorTweet , nameInDoubleAnchorsTweet , nameInQuoteTweet ]
114+ . filter ( Boolean )
115+ . map ( n => parseNameArea ( n ! ) )
116+ . find ( r => r . name && r . handle ) ?? {
117+ name : '' ,
118+ handle : '' ,
119+ }
120+ )
99121 }
100122}
101123
0 commit comments