{"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","mapStateToProps","ImmutablePureComponent","height","handleAccountClick","e","button","ctrlKey","metaKey","context","router","acct","currentTarget","getAttribute","preventDefault","history","push","stopPropagation","handleOpenVideo","options","onOpenVideo","status","handleExpandedToggle","onToggleHidden","handleExpandedQuoteToggle","onQuoteToggleHidden","handleQuoteClick","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","quoteMuted","applicationLink","reblogLink","reblogIcon","favouriteLink","edited","identity","_0","_1","quote","account","localDomain","domain","media","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","expanded","onExpandedToggle","Date","year","contextTypes","PropTypes","object","propTypes","ImmutablePropTypes","map","func","isRequired","bool","string","showQuoteMedia","contains","inUse","available","onQuoteToggleMediaVisibility","delete","redraft","edit","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","cannot_quote","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","onQuote","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","publicStatus","pinnableStatus","mutingConversation","writtenByMe","me","isRemote","menu","action","PERMISSION_MANAGE_USERS","PERMISSION_MANAGE_FEDERATION","shareButton","replyIcon","reblogPrivate","reblogTitle","disabled","active","animate","StatusActionBar","quoteTitle","direction","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","quoteConfirm","quoteMessage","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","handleToggleQuoteMediaVisibility","unfavourite","type","handlePin","message","confirm","onConfirm","replyCompose","quoteCompose","handleModalReblog","privacy","unreblog","shiftKey","boostModal","initBoostModal","unbookmark","withRedraft","deleteModal","deleteStatus","editStatus","directCompose","mentionCompose","handleOpenMedia","handleHotkeyOpenMedia","startTime","initMuteModal","unmuteStatus","muteStatus","handleToggleHidden","revealStatus","hideStatus","handleQuoteToggleHidden","revealQuote","hideQuote","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","onToggleQuoteMediaVisibility","Helmet","displayName","username","prefix","str","num","slice","titleFromStatus","content"],"mappings":"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","file":"js/features/status-4cd529f49b38e3f7022d.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 { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport { mapStateToProps, quote } from '../../../components/status';\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 @connect(mapStateToProps) @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 onQuoteToggleHidden: 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 quoteMuted: PropTypes.bool,\n showMedia: PropTypes.bool,\n showQuoteMedia: PropTypes.bool,\n pictureInPicture: ImmutablePropTypes.contains({\n inUse: PropTypes.bool,\n available: PropTypes.bool,\n }),\n onToggleMediaVisibility: PropTypes.func,\n onQuoteToggleMediaVisibility: 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 const acct = e.currentTarget.getAttribute('data-acct');\n e.preventDefault();\n this.context.router.history.push(`/@${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 handleExpandedQuoteToggle = () => {\n this.props.onQuoteToggleHidden(this.props.status);\n }\n\n handleQuoteClick = () => {\n if (!this.context.router) {\n return;\n }\n\n const { status } = this.props;\n this.context.router.history.push(`/statuses/${status.getIn(['quote', 'id'])}`);\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, quoteMuted } = this.props;\n\n if (!status) {\n return null;\n }\n\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 const identity = (status, _0, _1, quote = false) => (\n \n
    \n \n
    \n );\n\n const media = (status, quote = false) => {\n if (pictureInPicture.get('inUse')) {\n return ;\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 return (\n \n );\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const attachment = status.getIn(['media_attachments', 0]);\n\n return (\n \n );\n } else {\n return (\n \n );\n }\n } else if (status.get('spoiler_text').length === 0) {\n return (\n \n );\n }\n\n return null;\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 {identity(status, null, null, false)}\n\n \n\n {media(status, false)}\n\n {quote(status, false, quoteMuted, this.handleQuoteClick, this.handleExpandedQuoteToggle, identity, media, this.context.router)}\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 StatusActionBar from '../../../components/status_action_bar';\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 quote: { id: 'status.quote', defaultMessage: 'Quote' },\n cannot_quote: { id: 'status.cannot_quote', defaultMessage: 'This post cannot be quoted' },\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 onQuote: PropTypes.func,\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 handleQuoteClick = () => {\n this.props.onQuote(this.props.status, this.context.router.history);\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\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 quoteCompose,\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 hideQuote,\n revealQuote,\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 quoteConfirm: { id: 'confirmations.quote.confirm', defaultMessage: 'Quote' },\n quoteMessage: { id: 'confirmations.quote.message', defaultMessage: 'Quoting 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 showQuoteMedia: defaultMediaVisibility(this.props.status ? this.props.status.get('quote', null) : null),\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({\n showMedia: defaultMediaVisibility(nextProps.status),\n showQuoteMedia: defaultMediaVisibility(nextProps.status.get('quote', null)),\n loadedStatusId: nextProps.status.get('id'),\n });\n }\n }\n\n handleToggleMediaVisibility = () => {\n this.setState({ showMedia: !this.state.showMedia });\n };\n\n handleToggleQuoteMediaVisibility = () => {\n this.setState({ showQuoteMedia: !this.state.showQuoteMedia });\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 handleQuoteClick = (status) => {\n let { askReplyConfirmation, dispatch, intl } = this.props;\n if (askReplyConfirmation) {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.quoteMessage),\n confirm: intl.formatMessage(messages.quoteConfirm),\n onConfirm: () => dispatch(quoteCompose(status, this.context.router.history)),\n }));\n } else {\n dispatch(quoteCompose(status, this.context.router.history));\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 handleQuoteToggleHidden = (status) => {\n if (status.get('quote_hidden')) {\n this.props.dispatch(revealQuote(status.get('id')));\n } else {\n this.props.dispatch(hideQuote(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":""}