| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  | <div class="status-toolbar {isStatusInOwnThread ? 'status-in-own-thread' : ''}" ref:node> | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |   <IconButton | 
					
						
							| 
									
										
										
										
											2018-04-12 21:18:14 -07:00
										 |  |  |     className="status-toolbar-reply-button" | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |     label={replyLabel} | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |     pressable="true" | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |     pressed={replyShown} | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |     href="#fa-reply" | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |     delegateKey={replyKey} | 
					
						
							|  |  |  |     focusKey={replyKey} | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |     /> | 
					
						
							|  |  |  |   <IconButton | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |     label={reblogLabel} | 
					
						
							|  |  |  |     pressable={!reblogDisabled} | 
					
						
							|  |  |  |     pressed={reblogged} | 
					
						
							|  |  |  |     disabled={reblogDisabled} | 
					
						
							|  |  |  |     href={reblogIcon} | 
					
						
							|  |  |  |     delegateKey={reblogKey} | 
					
						
							| 
									
										
										
										
											2018-04-21 08:32:40 -07:00
										 |  |  |     ref:reblogIcon | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |   /> | 
					
						
							|  |  |  |   <IconButton | 
					
						
							|  |  |  |     label="Favorite" | 
					
						
							|  |  |  |     pressable="true" | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |     pressed={favorited} | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |     href="#fa-star" | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |     delegateKey={favoriteKey} | 
					
						
							| 
									
										
										
										
											2018-04-21 08:32:40 -07:00
										 |  |  |     ref:favoriteIcon | 
					
						
							| 
									
										
										
										
											2018-03-11 19:40:32 -07:00
										 |  |  |   /> | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |   <IconButton | 
					
						
							| 
									
										
										
										
											2018-03-11 19:40:32 -07:00
										 |  |  |     label="Show more options" | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |     href="#fa-ellipsis-h" | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |     delegateKey={optionsKey} | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |   /> | 
					
						
							| 
									
										
										
										
											2018-01-20 21:42:46 -08:00
										 |  |  | </div> | 
					
						
							|  |  |  | <style> | 
					
						
							|  |  |  |   .status-toolbar { | 
					
						
							| 
									
										
										
										
											2018-02-09 20:07:48 -08:00
										 |  |  |     grid-area: toolbar; | 
					
						
							| 
									
										
										
										
											2018-01-20 21:42:46 -08:00
										 |  |  |     display: flex; | 
					
						
							|  |  |  |     justify-content: space-between; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-02-09 22:55:11 -08:00
										 |  |  |   .status-toolbar.status-in-own-thread { | 
					
						
							|  |  |  |     margin-left: 58px; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-01-20 21:42:46 -08:00
										 |  |  | </style> | 
					
						
							|  |  |  | <script> | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |   import IconButton from '../IconButton.html' | 
					
						
							| 
									
										
										
										
											2018-02-23 18:23:36 -08:00
										 |  |  |   import { store } from '../../_store/store' | 
					
						
							| 
									
										
										
										
											2018-04-17 21:47:30 -07:00
										 |  |  |   import { registerClickDelegates } from '../../_utils/delegate' | 
					
						
							| 
									
										
										
										
											2018-02-24 14:49:28 -08:00
										 |  |  |   import { setFavorited } from '../../_actions/favorite' | 
					
						
							| 
									
										
										
										
											2018-02-24 18:20:33 -08:00
										 |  |  |   import { setReblogged } from '../../_actions/reblog' | 
					
						
							| 
									
										
										
										
											2018-04-21 09:56:53 -07:00
										 |  |  |   import { importShowStatusOptionsDialog } from '../dialog/asyncDialogs' | 
					
						
							| 
									
										
										
										
											2018-03-11 19:40:32 -07:00
										 |  |  |   import { updateProfileAndRelationship } from '../../_actions/accounts' | 
					
						
							| 
									
										
										
										
											2018-03-21 09:38:20 -07:00
										 |  |  |   import { FAVORITE_ANIMATION, REBLOG_ANIMATION } from '../../_static/animations' | 
					
						
							| 
									
										
										
										
											2018-04-12 21:18:14 -07:00
										 |  |  |   import { on } from '../../_utils/eventBus' | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-20 21:42:46 -08:00
										 |  |  |   export default { | 
					
						
							| 
									
										
										
										
											2018-04-19 21:38:01 -07:00
										 |  |  |     oncreate () { | 
					
						
							| 
									
										
										
										
											2018-04-19 09:37:05 -07:00
										 |  |  |       let { | 
					
						
							|  |  |  |         favoriteKey, | 
					
						
							|  |  |  |         reblogKey, | 
					
						
							|  |  |  |         replyKey, | 
					
						
							|  |  |  |         optionsKey | 
					
						
							|  |  |  |       } = this.get() | 
					
						
							| 
									
										
										
										
											2018-04-17 21:47:30 -07:00
										 |  |  |       registerClickDelegates(this, { | 
					
						
							| 
									
										
										
										
											2018-04-19 09:37:05 -07:00
										 |  |  |         [favoriteKey]: (e) => this.onFavoriteClick(e), | 
					
						
							|  |  |  |         [reblogKey]: (e) => this.onReblogClick(e), | 
					
						
							|  |  |  |         [replyKey]: (e) => this.onReplyClick(e), | 
					
						
							|  |  |  |         [optionsKey]: (e) => this.onOptionsClick(e) | 
					
						
							| 
									
										
										
										
											2018-04-17 21:47:30 -07:00
										 |  |  |       }) | 
					
						
							| 
									
										
										
										
											2018-04-12 21:18:14 -07:00
										 |  |  |       on('postedStatus', this, this.onPostedStatus) | 
					
						
							| 
									
										
										
										
											2018-02-24 14:49:28 -08:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |     components: { | 
					
						
							|  |  |  |       IconButton | 
					
						
							| 
									
										
										
										
											2018-02-19 10:34:36 -08:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2018-02-23 18:23:36 -08:00
										 |  |  |     store: () => store, | 
					
						
							| 
									
										
										
										
											2018-02-24 14:49:28 -08:00
										 |  |  |     methods: { | 
					
						
							| 
									
										
										
										
											2018-04-19 21:38:01 -07:00
										 |  |  |       onFavoriteClick (e) { | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |         e.preventDefault() | 
					
						
							|  |  |  |         e.stopPropagation() | 
					
						
							| 
									
										
										
										
											2018-04-19 09:37:05 -07:00
										 |  |  |         let { originalStatusId, favorited } = this.get() | 
					
						
							| 
									
										
										
										
											2018-04-21 08:32:40 -07:00
										 |  |  |         let newFavoritedValue = !favorited | 
					
						
							|  |  |  |         /* no await */ setFavorited(originalStatusId, newFavoritedValue) | 
					
						
							|  |  |  |         if (newFavoritedValue) { | 
					
						
							|  |  |  |           this.refs.favoriteIcon.animate(FAVORITE_ANIMATION) | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-02-24 18:20:33 -08:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-04-19 21:38:01 -07:00
										 |  |  |       onReblogClick (e) { | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |         e.preventDefault() | 
					
						
							|  |  |  |         e.stopPropagation() | 
					
						
							| 
									
										
										
										
											2018-04-19 09:37:05 -07:00
										 |  |  |         let { originalStatusId, reblogged } = this.get() | 
					
						
							| 
									
										
										
										
											2018-04-21 08:32:40 -07:00
										 |  |  |         let newRebloggedValue = !reblogged | 
					
						
							|  |  |  |         /* no await */ setReblogged(originalStatusId, newRebloggedValue) | 
					
						
							|  |  |  |         if (newRebloggedValue) { | 
					
						
							|  |  |  |           this.refs.reblogIcon.animate(REBLOG_ANIMATION) | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-03-07 18:04:20 -08:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-04-19 21:38:01 -07:00
										 |  |  |       onReplyClick (e) { | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |         e.preventDefault() | 
					
						
							|  |  |  |         e.stopPropagation() | 
					
						
							|  |  |  |         requestAnimationFrame(() => { | 
					
						
							| 
									
										
										
										
											2018-04-19 09:37:05 -07:00
										 |  |  |           let { uuid } = this.get() | 
					
						
							|  |  |  |           let { repliesShown } = this.store.get() | 
					
						
							|  |  |  |           repliesShown[uuid] = !repliesShown[uuid] | 
					
						
							|  |  |  |           this.store.set({repliesShown}) | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |           this.fire('recalculateHeight') | 
					
						
							|  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2018-03-11 19:40:32 -07:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-04-19 21:38:01 -07:00
										 |  |  |       async onOptionsClick (e) { | 
					
						
							| 
									
										
										
										
											2018-03-30 01:06:17 -07:00
										 |  |  |         e.preventDefault() | 
					
						
							|  |  |  |         e.stopPropagation() | 
					
						
							| 
									
										
										
										
											2018-04-29 12:28:44 -07:00
										 |  |  |         let { originalStatus, originalAccountId } = this.get() | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |         let updateRelationshipPromise = updateProfileAndRelationship(originalAccountId) | 
					
						
							| 
									
										
										
										
											2018-04-21 09:56:53 -07:00
										 |  |  |         let showStatusOptionsDialog = await importShowStatusOptionsDialog() | 
					
						
							| 
									
										
										
										
											2018-03-11 19:40:32 -07:00
										 |  |  |         await updateRelationshipPromise | 
					
						
							| 
									
										
										
										
											2018-04-29 12:28:44 -07:00
										 |  |  |         showStatusOptionsDialog(originalStatus) | 
					
						
							| 
									
										
										
										
											2018-04-12 21:18:14 -07:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-04-19 21:38:01 -07:00
										 |  |  |       onPostedStatus (realm, inReplyToUuid) { | 
					
						
							| 
									
										
										
										
											2018-04-19 09:37:05 -07:00
										 |  |  |         let { | 
					
						
							|  |  |  |           originalStatusId, | 
					
						
							|  |  |  |           uuid | 
					
						
							|  |  |  |         } = this.get() | 
					
						
							|  |  |  |         if (realm !== originalStatusId || | 
					
						
							|  |  |  |             inReplyToUuid !== uuid) { | 
					
						
							| 
									
										
										
										
											2018-04-12 21:18:14 -07:00
										 |  |  |           return | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |           // return status to the reply button after posting a reply | 
					
						
							|  |  |  |           this.refs.node.querySelector('.status-toolbar-reply-button').focus() | 
					
						
							|  |  |  |         } catch (e) { /* ignore */ } | 
					
						
							| 
									
										
										
										
											2018-02-24 14:49:28 -08:00
										 |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2018-03-21 09:38:20 -07:00
										 |  |  |     data: () => ({ | 
					
						
							|  |  |  |       favoriteAnimation: FAVORITE_ANIMATION, | 
					
						
							|  |  |  |       reblogAnimation: REBLOG_ANIMATION | 
					
						
							|  |  |  |     }), | 
					
						
							| 
									
										
										
										
											2018-02-19 10:34:36 -08:00
										 |  |  |     computed: { | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |       replyLabel: ({ replyShown }) => replyShown ? 'Close reply' : 'Reply', | 
					
						
							|  |  |  |       reblogLabel: ({ visibility }) => { | 
					
						
							| 
									
										
										
										
											2018-02-19 10:34:36 -08:00
										 |  |  |         switch (visibility) { | 
					
						
							|  |  |  |           case 'private': | 
					
						
							|  |  |  |             return 'Cannot be boosted because this is followers-only' | 
					
						
							|  |  |  |           case 'direct': | 
					
						
							|  |  |  |             return 'Cannot be boosted because this is a direct message' | 
					
						
							|  |  |  |           default: | 
					
						
							|  |  |  |             return 'Boost' | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |       reblogIcon: ({ visibility }) => { | 
					
						
							| 
									
										
										
										
											2018-02-19 10:34:36 -08:00
										 |  |  |         switch (visibility) { | 
					
						
							|  |  |  |           case 'private': | 
					
						
							|  |  |  |             return '#fa-lock' | 
					
						
							|  |  |  |           case 'direct': | 
					
						
							|  |  |  |             return '#fa-envelope' | 
					
						
							|  |  |  |           default: | 
					
						
							|  |  |  |             return '#fa-retweet' | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |       reblogDisabled: ({ visibility }) => { | 
					
						
							| 
									
										
										
										
											2018-02-19 10:34:36 -08:00
										 |  |  |         return visibility === 'private' || visibility === 'direct' | 
					
						
							| 
									
										
										
										
											2018-02-23 18:23:36 -08:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |       reblogged: ({ originalStatusId, $currentStatusModifications, originalStatus }) => { | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |         if ($currentStatusModifications && originalStatusId in $currentStatusModifications.reblogs) { | 
					
						
							|  |  |  |           return $currentStatusModifications.reblogs[originalStatusId] | 
					
						
							| 
									
										
										
										
											2018-02-24 18:20:33 -08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |         return originalStatus.reblogged | 
					
						
							| 
									
										
										
										
											2018-02-24 18:20:33 -08:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |       favorited: ({ originalStatusId, $currentStatusModifications, originalStatus }) => { | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |         if ($currentStatusModifications && originalStatusId in $currentStatusModifications.favorites) { | 
					
						
							|  |  |  |           return $currentStatusModifications.favorites[originalStatusId] | 
					
						
							| 
									
										
										
										
											2018-02-23 18:23:36 -08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-03-15 20:04:24 -07:00
										 |  |  |         return originalStatus.favourited | 
					
						
							| 
									
										
										
										
											2018-02-24 14:49:28 -08:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |       favoriteKey: ({ uuid }) => `fav-${uuid}`, | 
					
						
							|  |  |  |       reblogKey: ({ uuid }) => `reblog-${uuid}`, | 
					
						
							|  |  |  |       replyKey: ({ uuid }) => `reply-${uuid}`, | 
					
						
							|  |  |  |       optionsKey: ({ uuid }) => `options-${uuid}` | 
					
						
							| 
									
										
										
										
											2018-01-28 12:51:48 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-01-20 21:42:46 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | </script> |