| 
					
				 | 
			
			
				@@ -65,7 +65,7 @@ function formatPlainText(text: string): SafeString { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class TextFormatter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private splices: { text: StringLike, indices: [number, number] }[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  private media: { type: 'video' | 'img', url: string, link?: string }[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private media: { type: 'video' | 'img', url: string, loop: boolean, link?: string }[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private characters: string[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   constructor(readonly tweet: Tweet, readonly useProxy: boolean) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -97,7 +97,7 @@ class TextFormatter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for (const item of media) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (item.type === 'photo') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const url = new URL(item.media_url_https).toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.media.push({ type: 'img', url }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.media.push({ type: 'img', url, loop: false }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else if (item.video_info !== undefined) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let max = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let maxUrl: string | undefined = undefined; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -110,12 +110,13 @@ class TextFormatter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             maxUrl = variant.url; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const loop = item.type === 'animated_gif'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (maxUrl !== undefined) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           const url = new URL(maxUrl).toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          this.media.push({ type: 'video', url }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.media.push({ type: 'video', url, loop }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           const url = new URL(item.media_url_https).toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          this.media.push({ type: 'img', url, link: item.expanded_url }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.media.push({ type: 'img', url, link: item.expanded_url, loop }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -172,7 +173,7 @@ class TextFormatter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       index = indices[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     html.push(formatPlainText(this.getRange(index))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (const { type, url, link } of this.media) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (const { type, url, link, loop } of this.media) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       html.push(tag('br')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       html.push(tag('br')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const src = this.useProxy ? buildProxyUrl(url) : url; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -181,7 +182,7 @@ class TextFormatter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           tag('img', { loading: 'lazy', src }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else if (type === 'video') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        html.push(tag('video', { controls: '', src })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push(tag('video', { controls: '', src, loop: `${loop}` })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return joinChildren(html); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -207,7 +208,7 @@ blockquote { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 div { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   max-width: 600px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-img { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+img, video { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   max-width: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 `; 
			 |