{"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","dropdownPlacement","getIn","openDropdownId","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","data-index","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","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","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","aria-label","scrollKey","tabIndex","textForScreenReader","Helmet","displayName","username","prefix","str","num","slice","titleFromStatus","content"],"mappings":"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","file":"js/features/status-2c1aea0c297c982b8943.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 dropdownPlacement: state.getIn(['dropdown_menu', 'placement']),\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, dropdownPlacement, keyboard) {\n dispatch(fetchHistory(statusId));\n dispatch(openDropdownMenu(id, dropdownPlacement, 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 } 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 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) {\n menu.push(null);\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 }\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.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":""}