| 
									
										
										
										
											2018-02-04 12:10:02 -08:00
										 |  |  | <div | 
					
						
							| 
									
										
										
										
											2018-02-04 12:49:42 -08:00
										 |  |  |   class="status-content {{isStatusInOwnThread ? 'status-in-own-thread' : ''}} {{isStatusInNotification ? 'status-in-notification' : ''}}" | 
					
						
							| 
									
										
										
										
											2018-02-04 12:10:02 -08:00
										 |  |  |   ref:node | 
					
						
							|  |  |  | > | 
					
						
							| 
									
										
										
										
											2018-02-11 23:07:48 -08:00
										 |  |  |     {{{massagedContent}}} | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  | </div> | 
					
						
							|  |  |  | <style> | 
					
						
							|  |  |  |   .status-content { | 
					
						
							|  |  |  |     margin: 10px 10px 10px 5px; | 
					
						
							| 
									
										
										
										
											2018-02-09 20:07:48 -08:00
										 |  |  |     grid-area: content; | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |     word-wrap: break-word; | 
					
						
							|  |  |  |     overflow: hidden; | 
					
						
							|  |  |  |     white-space: pre-wrap; | 
					
						
							|  |  |  |     font-size: 0.9em; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-04 12:10:02 -08:00
										 |  |  |   .status-content.status-in-own-thread { | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |     font-size: 1.3em; | 
					
						
							|  |  |  |     margin: 20px 10px 20px 5px; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   :global(.status-content .status-emoji) { | 
					
						
							|  |  |  |     width: 20px; | 
					
						
							|  |  |  |     height: 20px; | 
					
						
							|  |  |  |     margin: -3px 0; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   :global(.status-content p) { | 
					
						
							|  |  |  |     margin: 0 0 20px; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   :global(.status-content p:first-child) { | 
					
						
							|  |  |  |     margin: 0 0 20px; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   :global(.status-content p:last-child) { | 
					
						
							|  |  |  |     margin: 0; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-02-04 12:49:42 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   .status-content.status-in-notification { | 
					
						
							|  |  |  |     color: var(--very-deemphasized-text-color); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   :global(.status-content.status-in-notification a, .status-content.status-in-notification a:hover) { | 
					
						
							|  |  |  |     color: var(--very-deemphasized-link-color); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-10 14:30:09 -08:00
										 |  |  |   :global(.status-content .invisible) { | 
					
						
							|  |  |  |     /* copied from Mastodon */ | 
					
						
							|  |  |  |     font-size: 0; | 
					
						
							|  |  |  |     line-height: 0; | 
					
						
							|  |  |  |     display: inline-block; | 
					
						
							|  |  |  |     width: 0; | 
					
						
							|  |  |  |     height: 0; | 
					
						
							|  |  |  |     position: absolute; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  | </style> | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  |   import { replaceAll } from '../../_utils/strings' | 
					
						
							|  |  |  |   import { mark, stop } from '../../_utils/marks' | 
					
						
							|  |  |  |   import { store } from '../../_store/store' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   export default { | 
					
						
							|  |  |  |     oncreate() { | 
					
						
							|  |  |  |       this.hydrateContent() | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     store: () => store, | 
					
						
							|  |  |  |     computed: { | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |       massagedContent: (originalStatus, $autoplayGifs) => { | 
					
						
							|  |  |  |         let content = originalStatus.content | 
					
						
							| 
									
										
										
										
											2018-02-11 23:07:48 -08:00
										 |  |  |         // emojify | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |         if (originalStatus.emojis && originalStatus.emojis.length) { | 
					
						
							|  |  |  |           for (let emoji of originalStatus.emojis) { | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |             let { shortcode, url, static_url } = emoji | 
					
						
							|  |  |  |             let urlToUse = $autoplayGifs ? url : static_url | 
					
						
							|  |  |  |             let shortcodeWithColons = `:${shortcode}:` | 
					
						
							|  |  |  |             content = replaceAll( | 
					
						
							|  |  |  |               content, | 
					
						
							|  |  |  |               shortcodeWithColons, | 
					
						
							|  |  |  |               `<img class="status-emoji" draggable="false" src="${urlToUse}" | 
					
						
							|  |  |  |                     alt="${shortcodeWithColons}" title="${shortcodeWithColons}" />` | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-02-11 23:07:48 -08:00
										 |  |  |         // GNU Social and Pleroma don't add <p> tags | 
					
						
							|  |  |  |         if (!content.startsWith('<p>')) { | 
					
						
							|  |  |  |           content = `<p>${content}</p>` | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |         return content | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |     }, | 
					
						
							|  |  |  |     methods: { | 
					
						
							|  |  |  |       hydrateContent() { | 
					
						
							|  |  |  |         if (!this.refs.node) { | 
					
						
							|  |  |  |           return | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-03-15 10:05:49 -07:00
										 |  |  |         let node = this.refs.node | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |         let originalStatus = this.get('originalStatus') | 
					
						
							|  |  |  |         let uuid = this.get('uuid') | 
					
						
							| 
									
										
										
										
											2018-02-10 13:57:04 -08:00
										 |  |  |         let count = 0 | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |         mark('hydrateContent') | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |         if (originalStatus.tags && originalStatus.tags.length) { | 
					
						
							| 
									
										
										
										
											2018-03-15 10:05:49 -07:00
										 |  |  |           let anchorTags = node.querySelectorAll('a[class~=hashtag][href^=http]') | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |           for (let tag of originalStatus.tags) { | 
					
						
							| 
									
										
										
										
											2018-04-04 18:34:43 -07:00
										 |  |  |             for (let i = 0, len = anchorTags.length; i < len; i++) { | 
					
						
							|  |  |  |               let anchorTag = anchorTags[i] | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |               if (anchorTag.getAttribute('href').endsWith(`/tags/${tag.name}`)) { | 
					
						
							|  |  |  |                 anchorTag.setAttribute('href', `/tags/${tag.name}`) | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |                 anchorTag.setAttribute('focus-key', `status-content-link-${uuid}-${++count}`) | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |                 anchorTag.removeAttribute('target') | 
					
						
							|  |  |  |                 anchorTag.removeAttribute('rel') | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |         if (originalStatus.mentions && originalStatus.mentions.length) { | 
					
						
							| 
									
										
										
										
											2018-03-15 10:05:49 -07:00
										 |  |  |           let anchorTags = node.querySelectorAll('a[class~=mention][href^=http]') | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |           for (let mention of originalStatus.mentions) { | 
					
						
							| 
									
										
										
										
											2018-04-04 18:34:43 -07:00
										 |  |  |             for (let i = 0, len = anchorTags.length; i < len; i++) { | 
					
						
							|  |  |  |               let anchorTag = anchorTags[i] | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |               if (anchorTag.getAttribute('href') === mention.url) { | 
					
						
							|  |  |  |                 anchorTag.setAttribute('href', `/accounts/${mention.id}`) | 
					
						
							| 
									
										
										
										
											2018-03-19 18:05:51 -07:00
										 |  |  |                 anchorTag.setAttribute('title', `@${mention.acct}`) | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |                 anchorTag.setAttribute('focus-key', `status-content-link-${uuid}-${++count}`) | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |                 anchorTag.removeAttribute('target') | 
					
						
							|  |  |  |                 anchorTag.removeAttribute('rel') | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-03-15 10:05:49 -07:00
										 |  |  |         let externalLinks = node.querySelectorAll('a[rel="nofollow noopener"]') | 
					
						
							| 
									
										
										
										
											2018-04-04 18:34:43 -07:00
										 |  |  |         for (let i = 0, len = externalLinks.length; i < len; i++) { | 
					
						
							|  |  |  |           let link = externalLinks[i] | 
					
						
							| 
									
										
										
										
											2018-03-04 15:31:31 -08:00
										 |  |  |           link.setAttribute('title', link.getAttribute('href')) | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |         stop('hydrateContent') | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | </script> |