| 
									
										
										
										
											2018-04-14 10:47:53 -07:00
										 |  |  | <div class="{{computedClass}}" 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-04-14 10:47:53 -07:00
										 |  |  |     display: none; | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-14 10:47:53 -07:00
										 |  |  |   .status-content.shown { | 
					
						
							|  |  |  |     display: block; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |   :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 { mark, stop } from '../../_utils/marks' | 
					
						
							|  |  |  |   import { store } from '../../_store/store' | 
					
						
							| 
									
										
										
										
											2018-04-14 10:47:53 -07:00
										 |  |  |   import { classname } from '../../_utils/classname' | 
					
						
							| 
									
										
										
										
											2018-04-14 15:50:06 -07:00
										 |  |  |   import { emojifyText } from '../../_utils/emojifyText' | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   export default { | 
					
						
							|  |  |  |     oncreate() { | 
					
						
							|  |  |  |       this.hydrateContent() | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     store: () => store, | 
					
						
							|  |  |  |     computed: { | 
					
						
							| 
									
										
										
										
											2018-04-14 10:47:53 -07:00
										 |  |  |       computedClass: (isStatusInOwnThread, isStatusInNotification, shown) => { | 
					
						
							|  |  |  |         return classname( | 
					
						
							|  |  |  |           'status-content', | 
					
						
							|  |  |  |           isStatusInOwnThread && 'status-in-own-thread', | 
					
						
							|  |  |  |           isStatusInNotification && 'status-in-notification', | 
					
						
							|  |  |  |           shown && 'shown' | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-04-16 20:54:16 -07:00
										 |  |  |       content: (originalStatus) => originalStatus.content, | 
					
						
							|  |  |  |       emojis: (originalStatus) => originalStatus.emojis, | 
					
						
							|  |  |  |       massagedContent: (content, emojis, $autoplayGifs) => { | 
					
						
							|  |  |  |         content = emojifyText(content, emojis, $autoplayGifs) | 
					
						
							| 
									
										
										
										
											2018-04-14 15:50:06 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-04-14 10:08:43 -07:00
										 |  |  |         mark('hydrateContent') | 
					
						
							| 
									
										
										
										
											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-04-14 10:08:43 -07:00
										 |  |  |         let anchors = node.getElementsByTagName('A') | 
					
						
							|  |  |  |         let mentions = originalStatus.mentions | 
					
						
							|  |  |  |         let tags = originalStatus.tags | 
					
						
							|  |  |  |         for (let i = 0, len = anchors.length; i < len; i++) { | 
					
						
							|  |  |  |           let anchor = anchors[i] | 
					
						
							|  |  |  |           let href = anchor.getAttribute('href') | 
					
						
							|  |  |  |           if (tags && anchor.classList.contains('hashtag')) { | 
					
						
							|  |  |  |             for (let j = 0, jLen = tags.length; j < jLen; j++) { | 
					
						
							|  |  |  |               let tag = tags[j] | 
					
						
							|  |  |  |               if (href.endsWith(`/tags/${tag.name}`)) { | 
					
						
							|  |  |  |                 anchor.setAttribute('href', `/tags/${tag.name}`) | 
					
						
							|  |  |  |                 anchor.setAttribute('focus-key', `status-content-link-${uuid}-${++count}`) | 
					
						
							|  |  |  |                 anchor.removeAttribute('target') | 
					
						
							|  |  |  |                 anchor.removeAttribute('rel') | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2018-04-14 10:08:43 -07:00
										 |  |  |           } else if (mentions && anchor.classList.contains('mention')) { | 
					
						
							|  |  |  |             for (let j = 0, jLen = mentions.length; j < jLen; j++) { | 
					
						
							|  |  |  |               let mention = mentions[j] | 
					
						
							|  |  |  |               if (href === mention.url) { | 
					
						
							|  |  |  |                 anchor.setAttribute('href', `/accounts/${mention.id}`) | 
					
						
							|  |  |  |                 anchor.setAttribute('title', `@${mention.acct}`) | 
					
						
							|  |  |  |                 anchor.setAttribute('focus-key', `status-content-link-${uuid}-${++count}`) | 
					
						
							|  |  |  |                 anchor.removeAttribute('target') | 
					
						
							|  |  |  |                 anchor.removeAttribute('rel') | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2018-04-14 10:08:43 -07:00
										 |  |  |           } else if (anchor.getAttribute('rel') === 'nofollow noopener') { | 
					
						
							|  |  |  |             anchor.setAttribute('title', href) | 
					
						
							| 
									
										
										
										
											2018-02-04 10:35:24 -08:00
										 |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         stop('hydrateContent') | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | </script> |