@@ -11,6 +11,8 @@ import {
1111 unstable_STYLE_META ,
1212 makeTypedMessageTuple ,
1313 FlattenTypedMessage ,
14+ makeTypedMessagePromise ,
15+ type TypedMessageImage ,
1416} from '@masknet/typed-message'
1517import { collectNodeText , collectTwitterEmoji } from '../../../utils/index.js'
1618
@@ -102,6 +104,32 @@ export function postContentMessageParser(node: HTMLElement): TypedMessage {
102104 } else if ( node instanceof HTMLAnchorElement ) {
103105 const anchor = node
104106 const href = anchor . getAttribute ( 'title' ) ?? anchor . getAttribute ( 'href' )
107+ if ( href ?. includes ( '/photo/' ) ) {
108+ const image = node . querySelector < HTMLImageElement > ( 'img' )
109+ if ( image )
110+ return makeTypedMessageImage ( image . src , { width : node . clientWidth , height : node . clientHeight } )
111+ return makeTypedMessagePromise (
112+ new Promise < TypedMessageImage > ( ( resolve ) => {
113+ const ob = new MutationObserver ( ( ) => {
114+ const image = node . querySelector < HTMLImageElement > ( 'img' )
115+ if ( image ) {
116+ ob . disconnect ( )
117+ resolve (
118+ makeTypedMessageImage ( image . src , {
119+ width : node . clientWidth ,
120+ height : node . clientHeight ,
121+ } ) ,
122+ )
123+ }
124+ } )
125+ ob . observe ( node , { childList : true , subtree : true } )
126+ setTimeout ( ( ) => {
127+ ob . disconnect ( )
128+ } , 60 * 1000 )
129+ } ) ,
130+ makeTypedMessageEmpty ( ) ,
131+ )
132+ }
105133 const content = anchor . textContent
106134 if ( ! content ) return makeTypedMessageEmpty ( )
107135 const altImage = node . querySelector ( 'img' )
0 commit comments