{"version":3,"sources":["webpack:///./app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js","webpack:///./app/javascript/mastodon/components/edited_timestamp/index.js","webpack:///./app/javascript/mastodon/features/status/components/detailed_status.js","webpack:///./app/javascript/mastodon/features/status/components/action_bar.js","webpack:///./app/javascript/mastodon/features/status/index.js"],"names":["connect","state","statusId","openDropdownId","getIn","openedViaKeyboard","items","loading","dispatch","onOpen","id","onItemClick","keyboard","fetchHistory","openDropdownMenu","onClose","closeDropdownMenu","DropdownMenu","EditedTimestamp","index","openModal","injectIntl","React","PureComponent","handleItemClick","item","i","this","props","renderHeader","defaultMessage","values","count","size","renderItem","onClick","onKeyPress","formattedDate","timestamp","get","short","formattedName","accountId","label","name","date","className","render","intl","scrollable","formatDate","hour12","month","day","hour","minute","messages","defineMessages","public_short","unlisted_short","private_short","direct_short","DetailedStatus","ImmutablePureComponent","height","handleAccountClick","e","button","ctrlKey","metaKey","context","router","preventDefault","history","push","status","stopPropagation","handleOpenVideo","options","onOpenVideo","handleExpandedToggle","onToggleHidden","setRef","c","node","_measureHeight","handleModalLink","href","target","nodeName","parentNode","window","open","handleTranslate","onTranslate","heightJustChanged","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","outerStyle","boxSizing","compact","pictureInPicture","media","applicationLink","reblogLink","reblogIcon","favouriteLink","edited","attachment","src","alt","duration","poster","backgroundColor","foregroundColor","accentColor","sensitive","visible","showMedia","blurhash","onToggleVisibility","onToggleMediaVisibility","preview","frameRate","width","inline","standalone","onOpenMedia","length","card","Fragment","rel","visibilityIcon","icon","text","formatMessage","visibilityLink","title","includes","Link","to","value","style","ref","classNames","account","localDomain","domain","expanded","onExpandedToggle","Date","year","contextTypes","PropTypes","object","propTypes","ImmutablePropTypes","map","func","isRequired","bool","string","contains","inUse","available","delete","redraft","edit","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","bookmark","more","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","admin_domain","copy","blockDomain","unblockDomain","unmute","unblock","openOriginalPage","ActionBar","relationship","handleReplyClick","onReply","handleReblogClick","onReblog","handleFavouriteClick","onFavourite","handleBookmarkClick","onBookmark","handleDeleteClick","onDelete","handleRedraftClick","handleEditClick","onEdit","handleDirectClick","onDirect","handleMentionClick","onMention","handleMuteClick","onMute","onUnmute","handleBlockClick","onBlock","onUnblock","handleBlockDomain","onBlockDomain","split","handleUnblockDomain","onUnblockDomain","handleConversationMuteClick","onMuteConversation","handleReport","onReport","handlePinClick","onPin","handleShare","navigator","url","handleEmbed","onEmbed","handleCopy","clipboard","writeText","signedIn","permissions","identity","publicStatus","pinnableStatus","mutingConversation","writtenByMe","me","isRemote","menu","action","PERMISSION_MANAGE_USERS","PERMISSION_MANAGE_FEDERATION","shareButton","replyIcon","reblogPrivate","reblogTitle","disabled","active","animate","direction","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","blockDomainConfirm","Status","getStatus","makeGetStatus","getPictureInPicture","makeGetPictureInPicture","getAncestorsIds","createSelector","_","inReplyTos","ancestorsIds","Immutable","List","withMutations","mutable","unshift","getDescendantsIds","contextReplies","statuses","descendantsIds","ids","pop","replies","reverse","forEach","insertAt","findIndex","idx","splice","params","isLoading","askReplyConfirmation","trim","fullscreen","defaultMediaVisibility","loadedStatusId","undefined","handleToggleMediaVisibility","unfavourite","type","handlePin","message","confirm","onConfirm","replyCompose","handleModalReblog","privacy","unreblog","shiftKey","boostModal","initBoostModal","unbookmark","withRedraft","deleteModal","deleteStatus","editStatus","directCompose","mentionCompose","handleOpenMedia","handleHotkeyOpenMedia","startTime","initMuteModal","unmuteStatus","muteStatus","handleToggleHidden","revealStatus","hideStatus","handleToggleAll","statusIds","concat","toJS","undoStatusTranslation","translateStatus","initBlockModal","initReport","handleUnmuteClick","unmuteAccount","handleUnblockClick","unblockAccount","handleBlockDomainClick","handleUnblockDomainClick","handleHotkeyMoveUp","handleMoveUp","handleHotkeyMoveDown","handleMoveDown","handleHotkeyReply","handleHotkeyFavourite","handleHotkeyBoost","handleHotkeyMention","handleHotkeyOpenProfile","handleHotkeyToggleHidden","handleHotkeyToggleSensitive","_selectChild","indexOf","onFullScreenChange","isFullscreen","componentWillMount","fetchStatus","componentDidMount","attachFullscreenListener","componentWillReceiveProps","nextProps","_scrolledIntoView","align_top","container","element","querySelectorAll","scrollTop","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","renderChildren","list","onMoveUp","onMoveDown","contextType","requestAnimationFrame","componentWillUnmount","detachFullscreenListener","ancestors","descendants","multiColumn","isLocal","isIndexable","handlers","moveUp","moveDown","boost","openProfile","toggleHidden","toggleSensitive","openMedia","bindToDocument","showBackButton","extraButton","scrollKey","tabIndex","textForScreenReader","Helmet","displayName","username","prefix","str","num","slice","titleFromStatus","content"],"mappings":"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","file":"js/features/status-8f6805c224a3aa5b05c6.chunk.js","sourcesContent":["import { connect } from 'react-redux';\nimport { openDropdownMenu, closeDropdownMenu } from 'mastodon/actions/dropdown_menu';\nimport { fetchHistory } from 'mastodon/actions/history';\nimport DropdownMenu from 'mastodon/components/dropdown_menu';\n\nconst mapStateToProps = (state, { statusId }) => ({\n openDropdownId: state.getIn(['dropdown_menu', 'openId']),\n openedViaKeyboard: state.getIn(['dropdown_menu', 'keyboard']),\n items: state.getIn(['history', statusId, 'items']),\n loading: state.getIn(['history', statusId, 'loading']),\n});\n\nconst mapDispatchToProps = (dispatch, { statusId }) => ({\n\n onOpen (id, onItemClick, keyboard) {\n dispatch(fetchHistory(statusId));\n dispatch(openDropdownMenu(id, keyboard));\n },\n\n onClose (id) {\n dispatch(closeDropdownMenu(id));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DropdownMenu);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage, injectIntl } from 'react-intl';\nimport Icon from 'mastodon/components/icon';\nimport DropdownMenu from './containers/dropdown_menu_container';\nimport { connect } from 'react-redux';\nimport { openModal } from 'mastodon/actions/modal';\nimport RelativeTimestamp from 'mastodon/components/relative_timestamp';\nimport InlineAccount from 'mastodon/components/inline_account';\n\nconst mapDispatchToProps = (dispatch, { statusId }) => ({\n\n onItemClick (index) {\n dispatch(openModal('COMPARE_HISTORY', { index, statusId }));\n },\n\n});\n\nexport default @connect(null, mapDispatchToProps)\n@injectIntl\nclass EditedTimestamp extends React.PureComponent {\n\n static propTypes = {\n statusId: PropTypes.string.isRequired,\n timestamp: PropTypes.string.isRequired,\n intl: PropTypes.object.isRequired,\n onItemClick: PropTypes.func.isRequired,\n };\n\n handleItemClick = (item, i) => {\n const { onItemClick } = this.props;\n onItemClick(i);\n };\n\n renderHeader = items => {\n return (\n \n );\n };\n\n renderItem = (item, index, { onClick, onKeyPress }) => {\n const formattedDate = ;\n const formattedName = ;\n\n const label = item.get('original') ? (\n \n ) : (\n \n );\n\n return (\n
  • \n \n
  • \n );\n };\n\n render () {\n const { timestamp, intl, statusId } = this.props;\n\n return (\n \n \n \n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport StatusContent from '../../../components/status_content';\nimport MediaGallery from '../../../components/media_gallery';\nimport { Link } from 'react-router-dom';\nimport { injectIntl, defineMessages, FormattedDate } from 'react-intl';\nimport Card from './card';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Video from '../../video';\nimport Audio from '../../audio';\nimport scheduleIdleTask from '../../ui/util/schedule_idle_task';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/components/icon';\nimport AnimatedNumber from 'mastodon/components/animated_number';\nimport PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder';\nimport EditedTimestamp from 'mastodon/components/edited_timestamp';\n\nconst messages = defineMessages({\n public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },\n unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },\n private_short: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },\n direct_short: { id: 'privacy.direct.short', defaultMessage: 'Direct' },\n});\n\nexport default @injectIntl\nclass DetailedStatus extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map,\n onOpenMedia: PropTypes.func.isRequired,\n onOpenVideo: PropTypes.func.isRequired,\n onToggleHidden: PropTypes.func.isRequired,\n onTranslate: PropTypes.func.isRequired,\n measureHeight: PropTypes.bool,\n onHeightChange: PropTypes.func,\n domain: PropTypes.string.isRequired,\n compact: PropTypes.bool,\n showMedia: PropTypes.bool,\n pictureInPicture: ImmutablePropTypes.contains({\n inUse: PropTypes.bool,\n available: PropTypes.bool,\n }),\n onToggleMediaVisibility: PropTypes.func,\n };\n\n state = {\n height: null,\n };\n\n handleAccountClick = (e) => {\n if (e.button === 0 && !(e.ctrlKey || e.metaKey) && this.context.router) {\n e.preventDefault();\n this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`);\n }\n\n e.stopPropagation();\n };\n\n handleOpenVideo = (options) => {\n this.props.onOpenVideo(this.props.status.getIn(['media_attachments', 0]), options);\n };\n\n handleExpandedToggle = () => {\n this.props.onToggleHidden(this.props.status);\n };\n\n _measureHeight (heightJustChanged) {\n if (this.props.measureHeight && this.node) {\n scheduleIdleTask(() => this.node && this.setState({ height: Math.ceil(this.node.scrollHeight) + 1 }));\n\n if (this.props.onHeightChange && heightJustChanged) {\n this.props.onHeightChange();\n }\n }\n }\n\n setRef = c => {\n this.node = c;\n this._measureHeight();\n };\n\n componentDidUpdate (prevProps, prevState) {\n this._measureHeight(prevState.height !== this.state.height);\n }\n\n handleModalLink = e => {\n e.preventDefault();\n\n let href;\n\n if (e.target.nodeName !== 'A') {\n href = e.target.parentNode.href;\n } else {\n href = e.target.href;\n }\n\n window.open(href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n };\n\n handleTranslate = () => {\n const { onTranslate, status } = this.props;\n onTranslate(status);\n };\n\n render () {\n const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status;\n const outerStyle = { boxSizing: 'border-box' };\n const { intl, compact, pictureInPicture } = this.props;\n\n if (!status) {\n return null;\n }\n\n let media = '';\n let applicationLink = '';\n let reblogLink = '';\n let reblogIcon = 'retweet';\n let favouriteLink = '';\n let edited = '';\n\n if (this.props.measureHeight) {\n outerStyle.height = `${this.state.height}px`;\n }\n\n if (pictureInPicture.get('inUse')) {\n media = ;\n } else if (status.get('media_attachments').size > 0) {\n if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n const attachment = status.getIn(['media_attachments', 0]);\n\n media = (\n \n );\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const attachment = status.getIn(['media_attachments', 0]);\n\n media = (\n \n );\n } else {\n media = (\n \n );\n }\n } else if (status.get('spoiler_text').length === 0) {\n media = ;\n }\n\n if (status.get('application')) {\n applicationLink = · {status.getIn(['application', 'name'])};\n }\n\n const visibilityIconInfo = {\n 'public': { icon: 'globe', text: intl.formatMessage(messages.public_short) },\n 'unlisted': { icon: 'unlock', text: intl.formatMessage(messages.unlisted_short) },\n 'private': { icon: 'lock', text: intl.formatMessage(messages.private_short) },\n 'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) },\n };\n\n const visibilityIcon = visibilityIconInfo[status.get('visibility')];\n const visibilityLink = · ;\n\n if (['private', 'direct'].includes(status.get('visibility'))) {\n reblogLink = '';\n } else if (this.context.router) {\n reblogLink = (\n \n · \n \n \n \n \n \n \n \n );\n } else {\n reblogLink = (\n \n · \n \n \n \n \n \n \n \n );\n }\n\n if (this.context.router) {\n favouriteLink = (\n \n \n \n \n \n \n );\n } else {\n favouriteLink = (\n \n \n \n \n \n \n );\n }\n\n if (status.get('edited_at')) {\n edited = (\n \n · \n \n \n );\n }\n\n return (\n
    \n
    \n \n
    \n \n
    \n\n \n\n {media}\n\n
    \n \n \n {edited}{visibilityLink}{applicationLink}{reblogLink} · {favouriteLink}\n
    \n
    \n
    \n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport IconButton from '../../../components/icon_button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport DropdownMenuContainer from '../../../containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { me } from '../../../initial_state';\nimport classNames from 'classnames';\nimport { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/permissions';\n\nconst messages = defineMessages({\n delete: { id: 'status.delete', defaultMessage: 'Delete' },\n redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n edit: { id: 'status.edit', defaultMessage: 'Edit' },\n direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },\n mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n reply: { id: 'status.reply', defaultMessage: 'Reply' },\n reblog: { id: 'status.reblog', defaultMessage: 'Boost' },\n reblog_private: { id: 'status.reblog_private', defaultMessage: 'Boost with original visibility' },\n cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' },\n cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },\n favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n more: { id: 'status.more', defaultMessage: 'More' },\n mute: { id: 'status.mute', defaultMessage: 'Mute @{name}' },\n muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n block: { id: 'status.block', defaultMessage: 'Block @{name}' },\n report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n share: { id: 'status.share', defaultMessage: 'Share' },\n pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },\n unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' },\n embed: { id: 'status.embed', defaultMessage: 'Embed' },\n admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },\n admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' },\n admin_domain: { id: 'status.admin_domain', defaultMessage: 'Open moderation interface for {domain}' },\n copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },\n blockDomain: { id: 'account.block_domain', defaultMessage: 'Block domain {domain}' },\n unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' },\n unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },\n unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },\n openOriginalPage: { id: 'account.open_original_page', defaultMessage: 'Open original page' },\n});\n\nconst mapStateToProps = (state, { status }) => ({\n relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass ActionBar extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n identity: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map.isRequired,\n relationship: ImmutablePropTypes.map,\n onReply: PropTypes.func.isRequired,\n onReblog: PropTypes.func.isRequired,\n onFavourite: PropTypes.func.isRequired,\n onBookmark: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onEdit: PropTypes.func.isRequired,\n onDirect: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n onMute: PropTypes.func,\n onUnmute: PropTypes.func,\n onBlock: PropTypes.func,\n onUnblock: PropTypes.func,\n onBlockDomain: PropTypes.func,\n onUnblockDomain: PropTypes.func,\n onMuteConversation: PropTypes.func,\n onReport: PropTypes.func,\n onPin: PropTypes.func,\n onEmbed: PropTypes.func,\n intl: PropTypes.object.isRequired,\n };\n\n handleReplyClick = () => {\n this.props.onReply(this.props.status);\n };\n\n handleReblogClick = (e) => {\n this.props.onReblog(this.props.status, e);\n };\n\n handleFavouriteClick = () => {\n this.props.onFavourite(this.props.status);\n };\n\n handleBookmarkClick = (e) => {\n this.props.onBookmark(this.props.status, e);\n };\n\n handleDeleteClick = () => {\n this.props.onDelete(this.props.status, this.context.router.history);\n };\n\n handleRedraftClick = () => {\n this.props.onDelete(this.props.status, this.context.router.history, true);\n };\n\n handleEditClick = () => {\n this.props.onEdit(this.props.status, this.context.router.history);\n };\n\n handleDirectClick = () => {\n this.props.onDirect(this.props.status.get('account'), this.context.router.history);\n };\n\n handleMentionClick = () => {\n this.props.onMention(this.props.status.get('account'), this.context.router.history);\n };\n\n handleMuteClick = () => {\n const { status, relationship, onMute, onUnmute } = this.props;\n const account = status.get('account');\n\n if (relationship && relationship.get('muting')) {\n onUnmute(account);\n } else {\n onMute(account);\n }\n };\n\n handleBlockClick = () => {\n const { status, relationship, onBlock, onUnblock } = this.props;\n const account = status.get('account');\n\n if (relationship && relationship.get('blocking')) {\n onUnblock(account);\n } else {\n onBlock(status);\n }\n };\n\n handleBlockDomain = () => {\n const { status, onBlockDomain } = this.props;\n const account = status.get('account');\n\n onBlockDomain(account.get('acct').split('@')[1]);\n };\n\n handleUnblockDomain = () => {\n const { status, onUnblockDomain } = this.props;\n const account = status.get('account');\n\n onUnblockDomain(account.get('acct').split('@')[1]);\n };\n\n handleConversationMuteClick = () => {\n this.props.onMuteConversation(this.props.status);\n };\n\n handleReport = () => {\n this.props.onReport(this.props.status);\n };\n\n handlePinClick = () => {\n this.props.onPin(this.props.status);\n };\n\n handleShare = () => {\n navigator.share({\n text: this.props.status.get('search_index'),\n url: this.props.status.get('url'),\n });\n };\n\n handleEmbed = () => {\n this.props.onEmbed(this.props.status);\n };\n\n handleCopy = () => {\n const url = this.props.status.get('url');\n navigator.clipboard.writeText(url);\n };\n\n render () {\n const { status, relationship, intl } = this.props;\n const { signedIn, permissions } = this.context.identity;\n\n const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n const pinnableStatus = ['public', 'unlisted', 'private'].includes(status.get('visibility'));\n const mutingConversation = status.get('muted');\n const account = status.get('account');\n const writtenByMe = status.getIn(['account', 'id']) === me;\n const isRemote = status.getIn(['account', 'username']) !== status.getIn(['account', 'acct']);\n\n let menu = [];\n\n if (publicStatus) {\n if (isRemote) {\n menu.push({ text: intl.formatMessage(messages.openOriginalPage), href: status.get('url') });\n }\n\n menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });\n menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n menu.push(null);\n }\n\n if (writtenByMe) {\n if (pinnableStatus) {\n menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n menu.push(null);\n }\n\n menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });\n menu.push(null);\n menu.push({ text: intl.formatMessage(messages.edit), action: this.handleEditClick });\n menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });\n menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });\n } else {\n menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });\n menu.push(null);\n\n if (relationship && relationship.get('muting')) {\n menu.push({ text: intl.formatMessage(messages.unmute, { name: account.get('username') }), action: this.handleMuteClick });\n } else {\n menu.push({ text: intl.formatMessage(messages.mute, { name: account.get('username') }), action: this.handleMuteClick });\n }\n\n if (relationship && relationship.get('blocking')) {\n menu.push({ text: intl.formatMessage(messages.unblock, { name: account.get('username') }), action: this.handleBlockClick });\n } else {\n menu.push({ text: intl.formatMessage(messages.block, { name: account.get('username') }), action: this.handleBlockClick });\n }\n\n menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });\n\n if (account.get('acct') !== account.get('username')) {\n const domain = account.get('acct').split('@')[1];\n\n menu.push(null);\n\n if (relationship && relationship.get('domain_blocking')) {\n menu.push({ text: intl.formatMessage(messages.unblockDomain, { domain }), action: this.handleUnblockDomain });\n } else {\n menu.push({ text: intl.formatMessage(messages.blockDomain, { domain }), action: this.handleBlockDomain });\n }\n }\n\n if ((permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS || (isRemote && (permissions & PERMISSION_MANAGE_FEDERATION) === PERMISSION_MANAGE_FEDERATION)) {\n menu.push(null);\n if ((permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS) {\n menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` });\n menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` });\n }\n if (isRemote && (permissions & PERMISSION_MANAGE_FEDERATION) === PERMISSION_MANAGE_FEDERATION) {\n const domain = account.get('acct').split('@')[1];\n menu.push({ text: intl.formatMessage(messages.admin_domain, { domain: domain }), href: `/admin/instances/${domain}` });\n }\n }\n }\n\n const shareButton = ('share' in navigator) && publicStatus && (\n
    \n );\n\n let replyIcon;\n if (status.get('in_reply_to_id', null) === null) {\n replyIcon = 'reply';\n } else {\n replyIcon = 'reply-all';\n }\n\n const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';\n\n let reblogTitle;\n if (status.get('reblogged')) {\n reblogTitle = intl.formatMessage(messages.cancel_reblog_private);\n } else if (publicStatus) {\n reblogTitle = intl.formatMessage(messages.reblog);\n } else if (reblogPrivate) {\n reblogTitle = intl.formatMessage(messages.reblog_private);\n } else {\n reblogTitle = intl.formatMessage(messages.cannot_reblog);\n }\n\n return (\n
    \n
    \n
    \n
    \n
    \n\n {shareButton}\n\n
    \n \n
    \n
    \n );\n }\n\n}\n","import Immutable from 'immutable';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { createSelector } from 'reselect';\nimport { fetchStatus } from '../../actions/statuses';\nimport MissingIndicator from '../../components/missing_indicator';\nimport LoadingIndicator from 'mastodon/components/loading_indicator';\nimport DetailedStatus from './components/detailed_status';\nimport ActionBar from './components/action_bar';\nimport Column from '../ui/components/column';\nimport {\n favourite,\n unfavourite,\n bookmark,\n unbookmark,\n reblog,\n unreblog,\n pin,\n unpin,\n} from '../../actions/interactions';\nimport {\n replyCompose,\n mentionCompose,\n directCompose,\n} from '../../actions/compose';\nimport {\n muteStatus,\n unmuteStatus,\n deleteStatus,\n editStatus,\n hideStatus,\n revealStatus,\n translateStatus,\n undoStatusTranslation,\n} from '../../actions/statuses';\nimport {\n unblockAccount,\n unmuteAccount,\n} from '../../actions/accounts';\nimport {\n blockDomain,\n unblockDomain,\n} from '../../actions/domain_blocks';\nimport { initMuteModal } from '../../actions/mutes';\nimport { initBlockModal } from '../../actions/blocks';\nimport { initBoostModal } from '../../actions/boosts';\nimport { initReport } from '../../actions/reports';\nimport { makeGetStatus, makeGetPictureInPicture } from '../../selectors';\nimport ScrollContainer from 'mastodon/containers/scroll_container';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport StatusContainer from '../../containers/status_container';\nimport { openModal } from '../../actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, deleteModal } from '../../initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';\nimport { textForScreenReader, defaultMediaVisibility } from '../../components/status';\nimport Icon from 'mastodon/components/icon';\nimport { Helmet } from 'react-helmet';\n\nconst messages = defineMessages({\n deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },\n deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },\n redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },\n redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },\n revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },\n hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },\n detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },\n replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },\n replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },\n blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Hide entire domain' },\n});\n\nconst makeMapStateToProps = () => {\n const getStatus = makeGetStatus();\n const getPictureInPicture = makeGetPictureInPicture();\n\n const getAncestorsIds = createSelector([\n (_, { id }) => id,\n state => state.getIn(['contexts', 'inReplyTos']),\n ], (statusId, inReplyTos) => {\n let ancestorsIds = Immutable.List();\n ancestorsIds = ancestorsIds.withMutations(mutable => {\n let id = statusId;\n\n while (id && !mutable.includes(id)) {\n mutable.unshift(id);\n id = inReplyTos.get(id);\n }\n });\n\n return ancestorsIds;\n });\n\n const getDescendantsIds = createSelector([\n (_, { id }) => id,\n state => state.getIn(['contexts', 'replies']),\n state => state.get('statuses'),\n ], (statusId, contextReplies, statuses) => {\n let descendantsIds = [];\n const ids = [statusId];\n\n while (ids.length > 0) {\n let id = ids.pop();\n const replies = contextReplies.get(id);\n\n if (statusId !== id) {\n descendantsIds.push(id);\n }\n\n if (replies) {\n replies.reverse().forEach(reply => {\n if (!ids.includes(reply) && !descendantsIds.includes(reply) && statusId !== reply) ids.push(reply);\n });\n }\n }\n\n let insertAt = descendantsIds.findIndex((id) => statuses.get(id).get('in_reply_to_account_id') !== statuses.get(id).get('account'));\n if (insertAt !== -1) {\n descendantsIds.forEach((id, idx) => {\n if (idx > insertAt && statuses.get(id).get('in_reply_to_account_id') === statuses.get(id).get('account')) {\n descendantsIds.splice(idx, 1);\n descendantsIds.splice(insertAt, 0, id);\n insertAt += 1;\n }\n });\n }\n\n return Immutable.List(descendantsIds);\n });\n\n const mapStateToProps = (state, props) => {\n const status = getStatus(state, { id: props.params.statusId });\n\n let ancestorsIds = Immutable.List();\n let descendantsIds = Immutable.List();\n\n if (status) {\n ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') });\n descendantsIds = getDescendantsIds(state, { id: status.get('id') });\n }\n\n return {\n isLoading: state.getIn(['statuses', props.params.statusId, 'isLoading']),\n status,\n ancestorsIds,\n descendantsIds,\n askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0,\n domain: state.getIn(['meta', 'domain']),\n pictureInPicture: getPictureInPicture(state, { id: props.params.statusId }),\n };\n };\n\n return mapStateToProps;\n};\n\nconst truncate = (str, num) => {\n if (str.length > num) {\n return str.slice(0, num) + '…';\n } else {\n return str;\n }\n};\n\nconst titleFromStatus = status => {\n const displayName = status.getIn(['account', 'display_name']);\n const username = status.getIn(['account', 'username']);\n const prefix = displayName.trim().length === 0 ? username : displayName;\n const text = status.get('search_index');\n\n return `${prefix}: \"${truncate(text, 30)}\"`;\n};\n\nexport default @injectIntl\n@connect(makeMapStateToProps)\nclass Status extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n identity: PropTypes.object,\n };\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n status: ImmutablePropTypes.map,\n isLoading: PropTypes.bool,\n ancestorsIds: ImmutablePropTypes.list,\n descendantsIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n askReplyConfirmation: PropTypes.bool,\n multiColumn: PropTypes.bool,\n domain: PropTypes.string.isRequired,\n pictureInPicture: ImmutablePropTypes.contains({\n inUse: PropTypes.bool,\n available: PropTypes.bool,\n }),\n };\n\n state = {\n fullscreen: false,\n showMedia: defaultMediaVisibility(this.props.status),\n loadedStatusId: undefined,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchStatus(this.props.params.statusId));\n }\n\n componentDidMount () {\n attachFullscreenListener(this.onFullScreenChange);\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this._scrolledIntoView = false;\n this.props.dispatch(fetchStatus(nextProps.params.statusId));\n }\n\n if (nextProps.params.statusId && nextProps.ancestorsIds.size > this.props.ancestorsIds.size) {\n this._scrolledIntoView = false;\n }\n\n if (nextProps.status && nextProps.status.get('id') !== this.state.loadedStatusId) {\n this.setState({ showMedia: defaultMediaVisibility(nextProps.status), loadedStatusId: nextProps.status.get('id') });\n }\n }\n\n handleToggleMediaVisibility = () => {\n this.setState({ showMedia: !this.state.showMedia });\n };\n\n handleFavouriteClick = (status) => {\n const { dispatch } = this.props;\n const { signedIn } = this.context.identity;\n\n if (signedIn) {\n if (status.get('favourited')) {\n dispatch(unfavourite(status));\n } else {\n dispatch(favourite(status));\n }\n } else {\n dispatch(openModal('INTERACTION', {\n type: 'favourite',\n accountId: status.getIn(['account', 'id']),\n url: status.get('url'),\n }));\n }\n };\n\n handlePin = (status) => {\n if (status.get('pinned')) {\n this.props.dispatch(unpin(status));\n } else {\n this.props.dispatch(pin(status));\n }\n };\n\n handleReplyClick = (status) => {\n const { askReplyConfirmation, dispatch, intl } = this.props;\n const { signedIn } = this.context.identity;\n\n if (signedIn) {\n if (askReplyConfirmation) {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.replyMessage),\n confirm: intl.formatMessage(messages.replyConfirm),\n onConfirm: () => dispatch(replyCompose(status, this.context.router.history)),\n }));\n } else {\n dispatch(replyCompose(status, this.context.router.history));\n }\n } else {\n dispatch(openModal('INTERACTION', {\n type: 'reply',\n accountId: status.getIn(['account', 'id']),\n url: status.get('url'),\n }));\n }\n };\n\n handleModalReblog = (status, privacy) => {\n this.props.dispatch(reblog(status, privacy));\n };\n\n handleReblogClick = (status, e) => {\n const { dispatch } = this.props;\n const { signedIn } = this.context.identity;\n\n if (signedIn) {\n if (status.get('reblogged')) {\n dispatch(unreblog(status));\n } else {\n if ((e && e.shiftKey) || !boostModal) {\n this.handleModalReblog(status);\n } else {\n dispatch(initBoostModal({ status, onReblog: this.handleModalReblog }));\n }\n }\n } else {\n dispatch(openModal('INTERACTION', {\n type: 'reblog',\n accountId: status.getIn(['account', 'id']),\n url: status.get('url'),\n }));\n }\n };\n\n handleBookmarkClick = (status) => {\n if (status.get('bookmarked')) {\n this.props.dispatch(unbookmark(status));\n } else {\n this.props.dispatch(bookmark(status));\n }\n };\n\n handleDeleteClick = (status, history, withRedraft = false) => {\n const { dispatch, intl } = this.props;\n\n if (!deleteModal) {\n dispatch(deleteStatus(status.get('id'), history, withRedraft));\n } else {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),\n confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),\n onConfirm: () => dispatch(deleteStatus(status.get('id'), history, withRedraft)),\n }));\n }\n };\n\n handleEditClick = (status, history) => {\n this.props.dispatch(editStatus(status.get('id'), history));\n };\n\n handleDirectClick = (account, router) => {\n this.props.dispatch(directCompose(account, router));\n };\n\n handleMentionClick = (account, router) => {\n this.props.dispatch(mentionCompose(account, router));\n };\n\n handleOpenMedia = (media, index) => {\n this.props.dispatch(openModal('MEDIA', { statusId: this.props.status.get('id'), media, index }));\n };\n\n handleOpenVideo = (media, options) => {\n this.props.dispatch(openModal('VIDEO', { statusId: this.props.status.get('id'), media, options }));\n };\n\n handleHotkeyOpenMedia = e => {\n const { status } = this.props;\n\n e.preventDefault();\n\n if (status.get('media_attachments').size > 0) {\n if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });\n } else {\n this.handleOpenMedia(status.get('media_attachments'), 0);\n }\n }\n };\n\n handleMuteClick = (account) => {\n this.props.dispatch(initMuteModal(account));\n };\n\n handleConversationMuteClick = (status) => {\n if (status.get('muted')) {\n this.props.dispatch(unmuteStatus(status.get('id')));\n } else {\n this.props.dispatch(muteStatus(status.get('id')));\n }\n };\n\n handleToggleHidden = (status) => {\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(status.get('id')));\n } else {\n this.props.dispatch(hideStatus(status.get('id')));\n }\n };\n\n handleToggleAll = () => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(statusIds));\n } else {\n this.props.dispatch(hideStatus(statusIds));\n }\n };\n\n handleTranslate = status => {\n const { dispatch } = this.props;\n\n if (status.get('translation')) {\n dispatch(undoStatusTranslation(status.get('id')));\n } else {\n dispatch(translateStatus(status.get('id')));\n }\n };\n\n handleBlockClick = (status) => {\n const { dispatch } = this.props;\n const account = status.get('account');\n dispatch(initBlockModal(account));\n };\n\n handleReport = (status) => {\n this.props.dispatch(initReport(status.get('account'), status));\n };\n\n handleEmbed = (status) => {\n this.props.dispatch(openModal('EMBED', { url: status.get('url') }));\n };\n\n handleUnmuteClick = account => {\n this.props.dispatch(unmuteAccount(account.get('id')));\n };\n\n handleUnblockClick = account => {\n this.props.dispatch(unblockAccount(account.get('id')));\n };\n\n handleBlockDomainClick = domain => {\n this.props.dispatch(openModal('CONFIRM', {\n message: {domain} }} />,\n confirm: this.props.intl.formatMessage(messages.blockDomainConfirm),\n onConfirm: () => this.props.dispatch(blockDomain(domain)),\n }));\n };\n\n handleUnblockDomainClick = domain => {\n this.props.dispatch(unblockDomain(domain));\n };\n\n\n handleHotkeyMoveUp = () => {\n this.handleMoveUp(this.props.status.get('id'));\n };\n\n handleHotkeyMoveDown = () => {\n this.handleMoveDown(this.props.status.get('id'));\n };\n\n handleHotkeyReply = e => {\n e.preventDefault();\n this.handleReplyClick(this.props.status);\n };\n\n handleHotkeyFavourite = () => {\n this.handleFavouriteClick(this.props.status);\n };\n\n handleHotkeyBoost = () => {\n this.handleReblogClick(this.props.status);\n };\n\n handleHotkeyMention = e => {\n e.preventDefault();\n this.handleMentionClick(this.props.status.get('account'));\n };\n\n handleHotkeyOpenProfile = () => {\n this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`);\n };\n\n handleHotkeyToggleHidden = () => {\n this.handleToggleHidden(this.props.status);\n };\n\n handleHotkeyToggleSensitive = () => {\n this.handleToggleMediaVisibility();\n };\n\n handleMoveUp = id => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n\n if (id === status.get('id')) {\n this._selectChild(ancestorsIds.size - 1, true);\n } else {\n let index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n this._selectChild(ancestorsIds.size + index, true);\n } else {\n this._selectChild(index - 1, true);\n }\n }\n };\n\n handleMoveDown = id => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n\n if (id === status.get('id')) {\n this._selectChild(ancestorsIds.size + 1, false);\n } else {\n let index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n this._selectChild(ancestorsIds.size + index + 2, false);\n } else {\n this._selectChild(index + 1, false);\n }\n }\n };\n\n _selectChild (index, align_top) {\n const container = this.node;\n const element = container.querySelectorAll('.focusable')[index];\n\n if (element) {\n if (align_top && container.scrollTop > element.offsetTop) {\n element.scrollIntoView(true);\n } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n element.scrollIntoView(false);\n }\n element.focus();\n }\n }\n\n renderChildren (list) {\n return list.map(id => (\n \n ));\n }\n\n setRef = c => {\n this.node = c;\n };\n\n componentDidUpdate () {\n if (this._scrolledIntoView) {\n return;\n }\n\n const { status, ancestorsIds } = this.props;\n\n if (status && ancestorsIds && ancestorsIds.size > 0) {\n const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];\n\n window.requestAnimationFrame(() => {\n element.scrollIntoView(true);\n });\n this._scrolledIntoView = true;\n }\n }\n\n componentWillUnmount () {\n detachFullscreenListener(this.onFullScreenChange);\n }\n\n onFullScreenChange = () => {\n this.setState({ fullscreen: isFullscreen() });\n };\n\n render () {\n let ancestors, descendants;\n const { isLoading, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props;\n const { fullscreen } = this.state;\n\n if (isLoading) {\n return (\n \n \n \n );\n }\n\n if (status === null) {\n return (\n \n \n \n \n );\n }\n\n if (ancestorsIds && ancestorsIds.size > 0) {\n ancestors =
    {this.renderChildren(ancestorsIds)}
    ;\n }\n\n if (descendantsIds && descendantsIds.size > 0) {\n descendants =
    {this.renderChildren(descendantsIds)}
    ;\n }\n\n const isLocal = status.getIn(['account', 'acct'], '').indexOf('@') === -1;\n const isIndexable = !status.getIn(['account', 'noindex']);\n\n const handlers = {\n moveUp: this.handleHotkeyMoveUp,\n moveDown: this.handleHotkeyMoveDown,\n reply: this.handleHotkeyReply,\n favourite: this.handleHotkeyFavourite,\n boost: this.handleHotkeyBoost,\n mention: this.handleHotkeyMention,\n openProfile: this.handleHotkeyOpenProfile,\n toggleHidden: this.handleHotkeyToggleHidden,\n toggleSensitive: this.handleHotkeyToggleSensitive,\n openMedia: this.handleHotkeyOpenMedia,\n };\n\n return (\n \n \n )}\n />\n\n \n
    \n {ancestors}\n\n \n
    \n \n\n \n
    \n
    \n\n {descendants}\n
    \n
    \n\n \n {titleFromStatus(status)}\n \n \n
    \n );\n }\n\n}\n"],"sourceRoot":""}