| 
									
										
										
										
											2018-03-16 00:01:03 -07:00
										 |  |  | <article class="{{className}}" | 
					
						
							| 
									
										
										
										
											2018-02-19 10:46:30 -08:00
										 |  |  |          tabindex="0" | 
					
						
							| 
									
										
										
										
											2018-03-15 08:59:30 -07:00
										 |  |  |          delegate-key="{{delegateKey}}" | 
					
						
							|  |  |  |          focus-key="{{delegateKey}}" | 
					
						
							| 
									
										
										
										
											2018-02-10 11:30:13 -08:00
										 |  |  |          aria-posinset="{{index}}" | 
					
						
							|  |  |  |          aria-setsize="{{length}}" | 
					
						
							| 
									
										
										
										
											2018-02-19 10:34:36 -08:00
										 |  |  |          aria-label="{{ariaLabel}}" | 
					
						
							| 
									
										
										
										
											2018-04-12 21:18:14 -07:00
										 |  |  |          on:recalculateHeight> | 
					
						
							| 
									
										
										
										
											2018-03-04 17:16:33 -08:00
										 |  |  |   {{#if showHeader}} | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |     <StatusHeader :notification :notificationId :status :statusId :timelineType | 
					
						
							|  |  |  |                   :account :accountId :uuid :isStatusInNotification /> | 
					
						
							| 
									
										
										
										
											2018-01-21 10:32:18 -08:00
										 |  |  |   {{/if}} | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |   <StatusAuthorName :isStatusInNotification :isStatusInOwnThread :originalAccountId | 
					
						
							|  |  |  |                     :originalAccount :uuid /> | 
					
						
							|  |  |  |   <StatusAuthorHandle :isStatusInNotification :originalAccount /> | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |   {{#if !isStatusInOwnThread}} | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |     <StatusRelativeDate :isStatusInNotification :originalStatus :originalStatusId :uuid /> | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |   {{/if}} | 
					
						
							| 
									
										
										
										
											2018-03-16 18:48:24 -07:00
										 |  |  |   <StatusSidebar :isStatusInOwnThread :originalAccount | 
					
						
							|  |  |  |                  :originalAccountId :uuid /> | 
					
						
							| 
									
										
										
										
											2018-04-03 09:45:17 -07:00
										 |  |  |   {{#if spoilerText}} | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |     <StatusSpoiler :isStatusInOwnThread :isStatusInNotification | 
					
						
							| 
									
										
										
										
											2018-03-16 00:01:03 -07:00
										 |  |  |                    :originalStatus :uuid :spoilerShown | 
					
						
							| 
									
										
										
										
											2018-03-15 08:59:30 -07:00
										 |  |  |                    on:recalculateHeight /> | 
					
						
							| 
									
										
										
										
											2018-01-21 10:32:18 -08:00
										 |  |  |   {{/if}} | 
					
						
							| 
									
										
										
										
											2018-04-03 09:45:17 -07:00
										 |  |  |   {{#if !spoilerText || spoilerShown}} | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |     <StatusContent :isStatusInOwnThread :isStatusInNotification | 
					
						
							|  |  |  |                    :originalStatus :uuid /> | 
					
						
							| 
									
										
										
										
											2018-01-21 10:32:18 -08:00
										 |  |  |   {{/if}} | 
					
						
							| 
									
										
										
										
											2018-02-04 12:18:22 -08:00
										 |  |  |   {{#if originalStatus.media_attachments && originalStatus.media_attachments.length}} | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |     <StatusMediaAttachments :originalStatus :uuid | 
					
						
							|  |  |  |                             on:recalculateHeight /> | 
					
						
							| 
									
										
										
										
											2018-01-21 12:34:35 -08:00
										 |  |  |   {{/if}} | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |   {{#if isStatusInOwnThread}} | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |   <StatusDetails :originalStatus :originalStatusId /> | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |   {{/if}} | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |   <StatusToolbar :originalStatus :originalStatusId :originalAccountId | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |                  :isStatusInOwnThread :uuid :visibility :replyShown | 
					
						
							|  |  |  |                  on:recalculateHeight /> | 
					
						
							|  |  |  |   {{#if replyShown}} | 
					
						
							| 
									
										
										
										
											2018-04-03 09:45:17 -07:00
										 |  |  |     <StatusComposeBox :originalStatusId :uuid :replyVisibility | 
					
						
							|  |  |  |                       :visibility :spoilerText | 
					
						
							| 
									
										
										
										
											2018-03-30 10:04:35 -07:00
										 |  |  |                       on:recalculateHeight /> | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |   {{/if}} | 
					
						
							| 
									
										
										
										
											2018-01-10 20:45:02 -08:00
										 |  |  | </article> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <style> | 
					
						
							| 
									
										
										
										
											2018-01-16 08:38:23 -08:00
										 |  |  |   .status-article { | 
					
						
							| 
									
										
										
										
											2018-02-10 11:00:56 -08:00
										 |  |  |     cursor: pointer; | 
					
						
							| 
									
										
										
										
											2018-01-16 08:44:35 -08:00
										 |  |  |     max-width: calc(100vw - 40px); | 
					
						
							|  |  |  |     padding: 10px 20px; | 
					
						
							| 
									
										
										
										
											2018-01-10 20:45:02 -08:00
										 |  |  |     display: grid; | 
					
						
							|  |  |  |     grid-template-areas: | 
					
						
							| 
									
										
										
										
											2018-03-22 21:36:19 -07:00
										 |  |  |         "header  header       header        header" | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |         "sidebar author-name  author-handle relative-date" | 
					
						
							|  |  |  |         "sidebar spoiler      spoiler       spoiler" | 
					
						
							|  |  |  |         "sidebar spoiler-btn  spoiler-btn   spoiler-btn" | 
					
						
							|  |  |  |         "sidebar content      content       content" | 
					
						
							|  |  |  |         "media   media        media         media" | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |         "....... toolbar      toolbar       toolbar" | 
					
						
							|  |  |  |         "compose compose      compose       compose"; | 
					
						
							| 
									
										
										
										
											2018-02-09 22:01:44 -08:00
										 |  |  |     grid-template-columns: min-content minmax(0, max-content) 1fr min-content; | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |     grid-template-rows: repeat(8, max-content); | 
					
						
							| 
									
										
										
										
											2018-01-21 13:35:03 -08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-01-16 08:38:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-06 20:54:49 -08:00
										 |  |  |   .status-article.status-in-timeline { | 
					
						
							|  |  |  |     width: 560px; | 
					
						
							|  |  |  |     border-bottom: 1px solid var(--main-border); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-27 18:25:49 -08:00
										 |  |  |   .status-article.status-direct { | 
					
						
							|  |  |  |     background-color: var(--status-direct-background); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |   .status-article.status-in-own-thread { | 
					
						
							|  |  |  |     grid-template-areas: | 
					
						
							|  |  |  |       "sidebar     author-name" | 
					
						
							|  |  |  |       "sidebar     author-handle" | 
					
						
							|  |  |  |       "spoiler     spoiler" | 
					
						
							|  |  |  |       "spoiler-btn spoiler-btn" | 
					
						
							|  |  |  |       "content     content" | 
					
						
							|  |  |  |       "media       media" | 
					
						
							| 
									
										
										
										
											2018-02-10 15:31:26 -08:00
										 |  |  |       "details     details" | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |       "toolbar     toolbar" | 
					
						
							|  |  |  |       "compose     compose"; | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |     grid-template-columns: min-content 1fr; | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |     grid-template-rows: repeat(7, max-content); | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 22:40:40 -08:00
										 |  |  |   @media (max-width: 767px) { | 
					
						
							|  |  |  |     .status-article { | 
					
						
							|  |  |  |       padding: 10px 10px; | 
					
						
							|  |  |  |       max-width: calc(100vw - 20px); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-02-25 11:29:19 -08:00
										 |  |  |     .status-article.status-in-timeline { | 
					
						
							|  |  |  |       width: 580px; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-01-30 22:40:40 -08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-01-10 20:45:02 -08:00
										 |  |  | </style> | 
					
						
							|  |  |  | <script> | 
					
						
							| 
									
										
										
										
											2018-02-04 10:50:39 -08:00
										 |  |  |   import StatusSidebar from './StatusSidebar.html' | 
					
						
							|  |  |  |   import StatusHeader from './StatusHeader.html' | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |   import StatusAuthorName from './StatusAuthorName.html' | 
					
						
							|  |  |  |   import StatusAuthorHandle from './StatusAuthorHandle.html' | 
					
						
							|  |  |  |   import StatusRelativeDate from './StatusRelativeDate.html' | 
					
						
							| 
									
										
										
										
											2018-02-10 15:31:26 -08:00
										 |  |  |   import StatusDetails from './StatusDetails.html' | 
					
						
							| 
									
										
										
										
											2018-02-04 10:50:39 -08:00
										 |  |  |   import StatusToolbar from './StatusToolbar.html' | 
					
						
							|  |  |  |   import StatusMediaAttachments from './StatusMediaAttachments.html' | 
					
						
							| 
									
										
										
										
											2018-02-04 12:18:22 -08:00
										 |  |  |   import StatusContent from './StatusContent.html' | 
					
						
							|  |  |  |   import StatusSpoiler from './StatusSpoiler.html' | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |   import StatusComposeBox from './StatusComposeBox.html' | 
					
						
							| 
									
										
										
										
											2018-01-28 13:09:39 -08:00
										 |  |  |   import { store } from '../../_store/store' | 
					
						
							| 
									
										
										
										
											2018-02-10 11:00:56 -08:00
										 |  |  |   import { goto } from 'sapper/runtime.js' | 
					
						
							| 
									
										
										
										
											2018-02-24 16:12:25 -08:00
										 |  |  |   import { registerClickDelegate, unregisterClickDelegate } from '../../_utils/delegate' | 
					
						
							| 
									
										
										
										
											2018-03-14 18:52:33 -07:00
										 |  |  |   import { classname } from '../../_utils/classname' | 
					
						
							| 
									
										
										
										
											2018-04-04 18:53:52 -07:00
										 |  |  |   import { checkDomAncestors } from '../../_utils/checkDomAncestors' | 
					
						
							| 
									
										
										
										
											2018-01-10 20:45:02 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |   const INPUT_TAGS = new Set(['a', 'button', 'input', 'textarea']) | 
					
						
							| 
									
										
										
										
											2018-04-04 18:53:52 -07:00
										 |  |  |   const isUserInputElement = node => INPUT_TAGS.has(node.localName) | 
					
						
							|  |  |  |   const isToolbar = node => node.classList.contains('status-toolbar') | 
					
						
							|  |  |  |   const isStatusArticle = node => node.classList.contains('status-article') | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-10 20:45:02 -08:00
										 |  |  |   export default { | 
					
						
							| 
									
										
										
										
											2018-02-10 11:30:13 -08:00
										 |  |  |     oncreate() { | 
					
						
							| 
									
										
										
										
											2018-03-15 08:59:30 -07:00
										 |  |  |       let delegateKey = this.get('delegateKey') | 
					
						
							| 
									
										
										
										
											2018-02-10 14:18:59 -08:00
										 |  |  |       if (!this.get('isStatusInOwnThread')) { | 
					
						
							|  |  |  |         // the whole <article> is clickable in this case | 
					
						
							| 
									
										
										
										
											2018-03-15 08:59:30 -07:00
										 |  |  |         registerClickDelegate(delegateKey, (e) => this.onClickOrKeydown(e)) | 
					
						
							| 
									
										
										
										
											2018-02-10 14:18:59 -08:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2018-02-10 11:30:13 -08:00
										 |  |  |     }, | 
					
						
							|  |  |  |     ondestroy() { | 
					
						
							| 
									
										
										
										
											2018-03-15 08:59:30 -07:00
										 |  |  |       let delegateKey = this.get('delegateKey') | 
					
						
							| 
									
										
										
										
											2018-02-10 14:18:59 -08:00
										 |  |  |       if (!this.get('isStatusInOwnThread')) { | 
					
						
							| 
									
										
										
										
											2018-03-15 08:59:30 -07:00
										 |  |  |         unregisterClickDelegate(delegateKey) | 
					
						
							| 
									
										
										
										
											2018-02-10 14:18:59 -08:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2018-02-10 11:30:13 -08:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2018-01-10 20:45:02 -08:00
										 |  |  |     components: { | 
					
						
							| 
									
										
										
										
											2018-02-04 10:50:39 -08:00
										 |  |  |       StatusSidebar, | 
					
						
							| 
									
										
										
										
											2018-02-04 10:23:18 -08:00
										 |  |  |       StatusHeader, | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |       StatusAuthorName, | 
					
						
							|  |  |  |       StatusAuthorHandle, | 
					
						
							|  |  |  |       StatusRelativeDate, | 
					
						
							| 
									
										
										
										
											2018-02-10 15:31:26 -08:00
										 |  |  |       StatusDetails, | 
					
						
							| 
									
										
										
										
											2018-02-04 10:50:39 -08:00
										 |  |  |       StatusToolbar, | 
					
						
							|  |  |  |       StatusMediaAttachments, | 
					
						
							| 
									
										
										
										
											2018-02-04 12:18:22 -08:00
										 |  |  |       StatusContent, | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |       StatusSpoiler, | 
					
						
							|  |  |  |       StatusComposeBox | 
					
						
							| 
									
										
										
										
											2018-01-10 20:45:02 -08:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2018-01-23 20:56:07 -08:00
										 |  |  |     store: () => store, | 
					
						
							| 
									
										
										
										
											2018-02-10 11:00:56 -08:00
										 |  |  |     methods: { | 
					
						
							|  |  |  |       onClickOrKeydown(e) { | 
					
						
							| 
									
										
										
										
											2018-04-04 18:53:52 -07:00
										 |  |  |         let { type, keyCode, target } = e | 
					
						
							| 
									
										
										
										
											2018-02-10 11:00:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 18:53:52 -07:00
										 |  |  |         let isClick = type === 'click' | 
					
						
							|  |  |  |         let isEnter = type === 'keydown' && keyCode === 13 | 
					
						
							|  |  |  |         if (!isClick && !isEnter) { | 
					
						
							|  |  |  |           return | 
					
						
							| 
									
										
										
										
											2018-02-10 11:00:56 -08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-04-04 18:53:52 -07:00
										 |  |  |         if (checkDomAncestors(target, isUserInputElement, isStatusArticle)) { | 
					
						
							|  |  |  |           // this element or any ancestors up to the status-article element is | 
					
						
							|  |  |  |           // a user input element | 
					
						
							|  |  |  |           return | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (checkDomAncestors(target, isToolbar, isStatusArticle)) { | 
					
						
							|  |  |  |           // this element or any of its ancestors is the toolbar | 
					
						
							|  |  |  |           return | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         e.preventDefault() | 
					
						
							|  |  |  |         e.stopPropagation() | 
					
						
							|  |  |  |         goto(`/statuses/${this.get('originalStatusId')}`) | 
					
						
							| 
									
										
										
										
											2018-02-10 11:00:56 -08:00
										 |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2018-01-14 19:28:50 -08:00
										 |  |  |     computed: { | 
					
						
							| 
									
										
										
										
											2018-01-19 00:51:51 -08:00
										 |  |  |       originalStatus: (status) => status.reblog ? status.reblog : status, | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |       originalStatusId: (originalStatus) => originalStatus.id, | 
					
						
							|  |  |  |       statusId: (status) => status.id, | 
					
						
							|  |  |  |       notificationId: (notification) => notification && notification.id, | 
					
						
							|  |  |  |       account: (notification, status) => { | 
					
						
							|  |  |  |         return (notification && notification.account) || status.account | 
					
						
							| 
									
										
										
										
											2018-02-04 12:49:42 -08:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |       accountId: (account) => account.id, | 
					
						
							| 
									
										
										
										
											2018-02-04 10:55:10 -08:00
										 |  |  |       originalAccount: (originalStatus) => originalStatus.account, | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |       originalAccountId: (originalAccount) => originalAccount.id, | 
					
						
							| 
									
										
										
										
											2018-03-16 00:01:03 -07:00
										 |  |  |       visibility: (originalStatus) => originalStatus.visibility, | 
					
						
							| 
									
										
										
										
											2018-04-03 09:45:17 -07:00
										 |  |  |       spoilerText: (originalStatus) => originalStatus.spoiler_text, | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |       uuid: ($currentInstance, timelineType, timelineValue, notificationId, statusId) => { | 
					
						
							|  |  |  |         return `${$currentInstance}/${timelineType}/${timelineValue}/${notificationId || ''}/${statusId}` | 
					
						
							| 
									
										
										
										
											2018-03-07 18:04:20 -08:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |       delegateKey: (uuid) => `status-${uuid}`, | 
					
						
							|  |  |  |       isStatusInOwnThread: (timelineType, timelineValue, originalStatusId) => { | 
					
						
							|  |  |  |         return (timelineType === 'status' || timelineType === 'reply') && timelineValue === originalStatusId | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       isStatusInNotification: (originalStatusId, notification) => { | 
					
						
							|  |  |  |         return notification && notification.status && | 
					
						
							|  |  |  |           notification.type !== 'mention' && notification.status.id === originalStatusId | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       spoilerShown: ($spoilersShown, uuid) => !!$spoilersShown[uuid], | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |       replyShown: ($repliesShown, uuid) => !!$repliesShown[uuid], | 
					
						
							| 
									
										
										
										
											2018-03-16 00:01:03 -07:00
										 |  |  |       ariaLabel: (originalAccount, originalStatus, visibility) => { | 
					
						
							|  |  |  |         return (visibility === 'direct' ? 'Direct message' : 'Status') + | 
					
						
							| 
									
										
										
										
											2018-02-19 10:34:36 -08:00
										 |  |  |           ` by ${originalAccount.display_name || originalAccount.username}` | 
					
						
							| 
									
										
										
										
											2018-03-04 17:16:33 -08:00
										 |  |  |       }, | 
					
						
							|  |  |  |       showHeader: (notification, status, timelineType) => { | 
					
						
							|  |  |  |         return (notification && (notification.type === 'reblog' || notification.type === 'favourite')) | 
					
						
							|  |  |  |           || status.reblog | 
					
						
							|  |  |  |           || timelineType === 'pinned' | 
					
						
							| 
									
										
										
										
											2018-03-16 00:01:03 -07:00
										 |  |  |       }, | 
					
						
							|  |  |  |       className: (visibility, timelineType, isStatusInOwnThread) => { | 
					
						
							|  |  |  |         return classname( | 
					
						
							|  |  |  |           'status-article', | 
					
						
							|  |  |  |           visibility === 'direct' && 'status-direct', | 
					
						
							|  |  |  |           timelineType !== 'search' && 'status-in-timeline', | 
					
						
							|  |  |  |           isStatusInOwnThread && 'status-in-own-thread' | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-02-19 10:34:36 -08:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2018-01-10 21:31:33 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-01-10 20:45:02 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | </script> |