parent
							
								
									a97600d4a2
								
							
						
					
					
						commit
						1b9d3b1cd0
					
				
					 3 changed files with 36 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -43,5 +43,6 @@ module.exports = [
 | 
			
		|||
  { id: 'fa-angle-left', src: 'src/thirdparty/font-awesome-svg-png/white/svg/angle-left.svg' },
 | 
			
		||||
  { id: 'fa-angle-right', src: 'src/thirdparty/font-awesome-svg-png/white/svg/angle-right.svg' },
 | 
			
		||||
  { id: 'fa-search-minus', src: 'src/thirdparty/font-awesome-svg-png/white/svg/search-minus.svg' },
 | 
			
		||||
  { id: 'fa-search-plus', src: 'src/thirdparty/font-awesome-svg-png/white/svg/search-plus.svg' }
 | 
			
		||||
  { id: 'fa-search-plus', src: 'src/thirdparty/font-awesome-svg-png/white/svg/search-plus.svg' },
 | 
			
		||||
  { id: 'fa-share-square-o', src: 'src/thirdparty/font-awesome-svg-png/white/svg/share-square-o.svg' }
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								src/routes/_actions/share.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/routes/_actions/share.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
import { toast } from '../_components/toast/toast'
 | 
			
		||||
import { statusHtmlToPlainText } from '../_utils/statusHtmlToPlainText'
 | 
			
		||||
 | 
			
		||||
export async function shareStatus (status) {
 | 
			
		||||
  try {
 | 
			
		||||
    await navigator.share({
 | 
			
		||||
      title: status.spoiler_text || undefined,
 | 
			
		||||
      text: statusHtmlToPlainText(status.content, status.mentions),
 | 
			
		||||
      url: status.url
 | 
			
		||||
    })
 | 
			
		||||
  } catch (e) {
 | 
			
		||||
    toast.say(`Unable to share: ` + (e.message || ''))
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -21,9 +21,13 @@ import { setStatusPinnedOrUnpinned } from '../../../_actions/pin'
 | 
			
		|||
import { setConversationMuted } from '../../../_actions/muteConversation'
 | 
			
		||||
import { copyText } from '../../../_actions/copyText'
 | 
			
		||||
import { deleteAndRedraft } from '../../../_actions/deleteAndRedraft'
 | 
			
		||||
import { shareStatus } from '../../../_actions/share'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  oncreate,
 | 
			
		||||
  data: () => ({
 | 
			
		||||
    supportsWebShare: process.browser && typeof navigator.share === 'function'
 | 
			
		||||
  }),
 | 
			
		||||
  computed: {
 | 
			
		||||
    relationship: ({ $currentAccountRelationship }) => $currentAccountRelationship,
 | 
			
		||||
    account: ({ $currentAccountProfile }) => $currentAccountProfile,
 | 
			
		||||
| 
						 | 
				
			
			@ -75,17 +79,18 @@ export default {
 | 
			
		|||
    mutingConversation: ({ status }) => !!status.muted,
 | 
			
		||||
    muteConversationLabel: ({ mutingConversation }) => mutingConversation ? `Unmute conversation` : `Mute conversation`,
 | 
			
		||||
    muteConversationIcon: ({ mutingConversation }) => mutingConversation ? '#fa-volume-up' : '#fa-volume-off',
 | 
			
		||||
    isPublicOrUnlisted: ({ visibility }) => visibility === 'public' || visibility === 'unlisted',
 | 
			
		||||
    items: ({
 | 
			
		||||
      blockLabel, blocking, blockIcon, muteLabel, muteIcon, followLabel, followIcon,
 | 
			
		||||
      following, followRequested, pinLabel, isUser, visibility, mentionsUser, mutingConversation,
 | 
			
		||||
      muteConversationLabel, muteConversationIcon
 | 
			
		||||
      muteConversationLabel, muteConversationIcon, supportsWebShare, isPublicOrUnlisted
 | 
			
		||||
    }) => ([
 | 
			
		||||
      isUser && {
 | 
			
		||||
        key: 'delete',
 | 
			
		||||
        label: 'Delete',
 | 
			
		||||
        icon: '#fa-trash'
 | 
			
		||||
      },
 | 
			
		||||
      visibility !== 'private' && visibility !== 'direct' && isUser && {
 | 
			
		||||
      isPublicOrUnlisted && isUser && {
 | 
			
		||||
        key: 'pin',
 | 
			
		||||
        label: pinLabel,
 | 
			
		||||
        icon: '#fa-thumb-tack'
 | 
			
		||||
| 
						 | 
				
			
			@ -115,7 +120,12 @@ export default {
 | 
			
		|||
        label: 'Delete and redraft',
 | 
			
		||||
        icon: '#fa-pencil'
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      isPublicOrUnlisted && supportsWebShare && {
 | 
			
		||||
        key: 'share',
 | 
			
		||||
        label: 'Share toot',
 | 
			
		||||
        icon: '#fa-share-square-o'
 | 
			
		||||
      },
 | 
			
		||||
      isPublicOrUnlisted && {
 | 
			
		||||
        key: 'copy',
 | 
			
		||||
        label: 'Copy link to toot',
 | 
			
		||||
        icon: '#fa-link'
 | 
			
		||||
| 
						 | 
				
			
			@ -148,6 +158,8 @@ export default {
 | 
			
		|||
          return this.onMuteConversationClicked()
 | 
			
		||||
        case 'redraft':
 | 
			
		||||
          return this.onRedraft()
 | 
			
		||||
        case 'share':
 | 
			
		||||
          return this.onShare()
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    async onDeleteClicked () {
 | 
			
		||||
| 
						 | 
				
			
			@ -190,6 +202,11 @@ export default {
 | 
			
		|||
      let { status } = this.get()
 | 
			
		||||
      await deleteAndRedraft(status)
 | 
			
		||||
      this.close()
 | 
			
		||||
    },
 | 
			
		||||
    async onShare () {
 | 
			
		||||
      let { status } = this.get()
 | 
			
		||||
      await shareStatus(status)
 | 
			
		||||
      this.close()
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue