{"version":3,"sources":["webpack:///./app/javascript/material-icons/400-24px/chat.svg","webpack:///app/javascript/opt/mastodon/app/javascript/flavours/glitch/features/status/components/action_bar.jsx","webpack:///app/javascript/opt/mastodon/app/javascript/flavours/glitch/features/status/index.jsx"],"names":["_path","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","_ref","title","titleId","props","xmlns","height","viewBox","width","fill","id","d","messages","defineMessages","delete","defaultMessage","redraft","edit","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","react","removeFavourite","bookmark","removeBookmark","more","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","admin_domain","copy","openOriginalPage","ActionBar","PureComponent","constructor","_defineProperty","this","onReply","status","onReblog","onFavourite","data","onReactionAdd","get","native","replace","imageUrl","onBookmark","onDelete","onEdit","onDirect","onMention","onMute","onBlock","onMuteConversation","onReport","onPin","navigator","url","onEmbed","clipboard","writeText","render","intl","signedIn","permissions","identity","publicStatus","includes","pinnableStatus","mutingConversation","writtenByMe","getIn","me","isRemote","replyIcon","replyIconComponent","menu","push","text","formatMessage","href","action","handleCopy","handleShare","handleEmbed","handlePinClick","handleConversationMuteClick","handleEditClick","handleDeleteClick","dangerous","handleRedraftClick","name","handleMentionClick","handleDirectClick","handleMuteClick","handleBlockClick","handleReport","PERMISSION_MANAGE_USERS","accountAdminLink","statusAdminLink","PERMISSION_MANAGE_FEDERATION","undefined","domain","split","ReplyIcon","ReplyAllIcon","canReact","filter","size","maxReactions","reblogPrivate","reblogTitle","reblogIconComponent","bookmarkTitle","favouriteTitle","RepeatActiveIcon","RepeatPrivateActiveIcon","RepeatIcon","RepeatPrivateIcon","RepeatDisabledIcon","_jsx","className","IconButton","icon","iconComponent","onClick","handleReplyClick","classNames","disabled","active","handleReblogClick","animate","StarIcon","StarBorderIcon","handleFavouriteClick","EmojiPickerDropdown","onPickEmoji","handleEmojiPick","AddReactionIcon","BookmarkIcon","BookmarkBorderIcon","handleBookmarkClick","DropdownMenuContainer","MoreHorizIcon","items","direction","withIdentity","injectIntl","revealAll","hideAll","statusTitleWithAttachments","detailedStatus","tootHeading","titleFromStatus","displayName","username","user","trim","attachmentCount","truncate","str","num","arr","Array","from","slice","join","Status","ImmutablePureComponent","_this","fullscreen","isExpanded","threadExpanded","statusId","loadedStatusId","showMedia","revealBehindCW","settings","dispatch","revealStatus","hideStatus","setExpansion","state","setState","toggleFavourite","shiftKey","openModal","modalType","modalProps","type","accountId","addReaction","removeReaction","askReplyConfirmation","replyCompose","toggleReblog","unbookmark","withRedraft","deleteModal","deleteStatus","editStatus","account","directCompose","mentionCompose","media","index","lang","options","preventDefault","handleOpenVideo","startTime","handleOpenMedia","initMuteModal","unmuteStatus","muteStatus","ancestorsIds","descendantsIds","statusIds","concat","toJS","undoStatusTranslation","translateStatus","initBlockModal","initReport","handleToggleMediaVisibility","handleMoveUp","handleMoveDown","history","handleTranslate","_selectChild","indexOf","column","scrollTop","value","c","node","statusNode","isFullscreen","prevRouterProps","_ref3","_location$state","_prevRouterProps$loca","location","mastodonModalKey","offsetTop","componentDidMount","attachFullscreenListener","onFullScreenChange","fetchStatus","params","_scrollStatusIntoView","getDerivedStateFromProps","update","updated","defaultMediaVisibility","autoUnfoldCW","align_top","container","element","querySelectorAll","scrollIntoView","clientHeight","offsetHeight","focus","renderChildren","list","ancestors","map","i","StatusContainer","expanded","onMoveUp","onMoveDown","contextType","previousId","nextId","rootId","multiColumn","requestIdleCallback","_this$statusNode","_document$querySelect","offset","document","querySelector","getBoundingClientRect","bottom","scrollingElement","body","scrollBy","componentDidUpdate","prevProps","_prevProps$status","componentWillUnmount","detachFullscreenListener","descendants","remoteHint","isLoading","pictureInPicture","Column","LoadingIndicator","BundleColumnError","errorType","_jsx2","_Fragment","children","isLocal","isIndexable","TimelineHint","message","FormattedMessage","label","values","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyBookmark","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleHidden","handleToggleHidden","toggleSensitive","handleHotkeyToggleSensitive","openMedia","handleHotkeyOpenMedia","onTranslate","handleHotkeyTranslate","_jsxs","bindToDocument","ref","setColumnRef","ColumnHeader","ChatIcon","handleHeaderClick","showBackButton","extraButton","handleToggleAll","Icon","VisibilityOffIcon","VisibilityIcon","ScrollContainer","scrollKey","shouldUpdateScroll","setContainerRef","HotKeys","tabIndex","textForScreenReader","setStatusRef","DetailedStatus","onOpenVideo","onOpenMedia","handleReactionAdd","onReactionRemove","handleReactionRemove","onToggleHidden","onToggleMediaVisibility","handlePin","Helmet","content","rel","identityContextPropShape","PropTypes","object","isRequired","func","ImmutablePropTypes","bool","string","contains","inUse","available","WithRouterPropTypes","withRouter","connect","makeMapStateToProps","getStatus","makeGetStatus","getPictureInPicture","makeGetPictureInPicture","getAncestorsIds","createSelector","_","inReplyTos","ImmutableList","withMutations","mutable","unshift","getDescendantsIds","_ref2","contextReplies","statuses","ids","pop","replies","reverse","forEach","insertAt","findIndex","idx","splice","mapStateToProps"],"mappings":"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","file":"js/flavours/glitch/async/status-1bb7b7f7f436d30e50dd.chunk.js","sourcesContent":["var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgChat(_ref) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 -960 960 960\",\n width: \"24px\",\n fill: \"#5f6368\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M240-400h320v-80H240v80Zm0-120h480v-80H240v80Zm0-120h480v-80H240v80ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z\"\n })));\n}\nexport default SvgChat;","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport classNames from 'classnames';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\n\nimport AddReactionIcon from '@/material-icons/400-24px/add_reaction.svg?react';\nimport BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg?react';\nimport BookmarkBorderIcon from '@/material-icons/400-24px/bookmark.svg?react';\nimport MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';\nimport RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';\nimport ReplyIcon from '@/material-icons/400-24px/reply.svg?react';\nimport ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react';\nimport StarIcon from '@/material-icons/400-24px/star-fill.svg?react';\nimport StarBorderIcon from '@/material-icons/400-24px/star.svg?react';\nimport RepeatActiveIcon from '@/svg-icons/repeat_active.svg?react';\nimport RepeatDisabledIcon from '@/svg-icons/repeat_disabled.svg?react';\nimport RepeatPrivateIcon from '@/svg-icons/repeat_private.svg?react';\nimport RepeatPrivateActiveIcon from '@/svg-icons/repeat_private_active.svg?react';\nimport { identityContextPropShape, withIdentity } from 'flavours/glitch/identity_context';\nimport { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'flavours/glitch/permissions';\nimport { accountAdminLink, statusAdminLink } from 'flavours/glitch/utils/backend_links';\n\nimport { IconButton } from '../../../components/icon_button';\nimport DropdownMenuContainer from '../../../containers/dropdown_menu_container';\nimport { me, maxReactions } from '../../../initial_state';\nimport EmojiPickerDropdown from '../../compose/containers/emoji_picker_dropdown_container';\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: 'Privately mention @{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: 'Favorite' },\n react: { id: 'status.react', defaultMessage: 'React' },\n removeFavourite: { id: 'status.remove_favourite', defaultMessage: 'Remove from favorites' },\n bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n removeBookmark: { id: 'status.remove_bookmark', defaultMessage: 'Remove 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: 'Get embed code' },\n admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },\n admin_status: { id: 'status.admin_status', defaultMessage: 'Open this post 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 post' },\n openOriginalPage: { id: 'account.open_original_page', defaultMessage: 'Open original page' },\n});\n\nclass ActionBar extends PureComponent {\n static propTypes = {\n identity: identityContextPropShape,\n status: ImmutablePropTypes.map.isRequired,\n onReply: PropTypes.func.isRequired,\n onReblog: PropTypes.func.isRequired,\n onFavourite: PropTypes.func.isRequired,\n onReactionAdd: 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 onBlock: 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 = (e) => {\n this.props.onFavourite(this.props.status, e);\n };\n\n handleEmojiPick = data => {\n this.props.onReactionAdd(this.props.status.get('id'), data.native.replace(/:/g, ''), data.imageUrl);\n };\n\n handleBookmarkClick = (e) => {\n this.props.onBookmark(this.props.status, e);\n };\n\n handleDeleteClick = () => {\n this.props.onDelete(this.props.status);\n };\n\n handleRedraftClick = () => {\n this.props.onDelete(this.props.status, true);\n };\n\n handleEditClick = () => {\n this.props.onEdit(this.props.status);\n };\n\n handleDirectClick = () => {\n this.props.onDirect(this.props.status.get('account'));\n };\n\n handleMentionClick = () => {\n this.props.onMention(this.props.status.get('account'));\n };\n\n handleMuteClick = () => {\n this.props.onMute(this.props.status.get('account'));\n };\n\n handleBlockClick = () => {\n this.props.onBlock(this.props.status);\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 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 handleNoOp = () => {}; // hack for reaction add button\n\n render () {\n const { status, intl } = this.props;\n const { signedIn, permissions } = this.props.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 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 && 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\n if (publicStatus && 'share' in navigator) {\n menu.push({ text: intl.formatMessage(messages.share), action: this.handleShare });\n }\n\n if (publicStatus && (signedIn || !isRemote)) {\n menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n }\n\n if (signedIn) {\n menu.push(null);\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, dangerous: true });\n menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick, dangerous: true });\n } else {\n menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });\n menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick });\n menu.push(null);\n menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick, dangerous: true });\n menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick, dangerous: true });\n menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport, dangerous: true });\n if (((permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS && (accountAdminLink || statusAdminLink)) || (isRemote && (permissions & PERMISSION_MANAGE_FEDERATION) === PERMISSION_MANAGE_FEDERATION)) {\n menu.push(null);\n if ((permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS) {\n if (accountAdminLink !== undefined) {\n menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: accountAdminLink(status.getIn(['account', 'id'])) });\n }\n if (statusAdminLink !== undefined) {\n menu.push({ text: intl.formatMessage(messages.admin_status), href: statusAdminLink(status.getIn(['account', 'id']), status.get('id')) });\n }\n }\n if (isRemote && (permissions & PERMISSION_MANAGE_FEDERATION) === PERMISSION_MANAGE_FEDERATION) {\n const domain = status.getIn(['account', 'acct']).split('@')[1];\n menu.push({ text: intl.formatMessage(messages.admin_domain, { domain: domain }), href: `/admin/instances/${domain}` });\n }\n }\n }\n }\n\n let replyIcon;\n let replyIconComponent;\n\n if (status.get('in_reply_to_id', null) === null) {\n replyIcon = 'reply';\n replyIconComponent = ReplyIcon;\n } else {\n replyIcon = 'reply-all';\n replyIconComponent = ReplyAllIcon;\n }\n\n const canReact = signedIn && status.get('reactions').filter(r => r.get('count') > 0 && r.get('me')).size < maxReactions;\n\n const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';\n\n let reblogTitle, reblogIconComponent;\n\n const bookmarkTitle = intl.formatMessage(status.get('bookmarked') ? messages.removeBookmark : messages.bookmark);\n const favouriteTitle = intl.formatMessage(status.get('favourited') ? messages.removeFavourite : messages.favourite);\n\n if (status.get('reblogged')) {\n reblogTitle = intl.formatMessage(messages.cancel_reblog_private);\n reblogIconComponent = publicStatus ? RepeatActiveIcon : RepeatPrivateActiveIcon;\n } else if (publicStatus) {\n reblogTitle = intl.formatMessage(messages.reblog);\n reblogIconComponent = RepeatIcon;\n } else if (reblogPrivate) {\n reblogTitle = intl.formatMessage(messages.reblog_private);\n reblogIconComponent = RepeatPrivateIcon;\n } else {\n reblogTitle = intl.formatMessage(messages.cannot_reblog);\n reblogIconComponent = RepeatDisabledIcon;\n }\n\n return (\n <div className='detailed-status__action-bar'>\n\n <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.reply)} icon={replyIcon} iconComponent={replyIconComponent} onClick={this.handleReplyClick} /></div>\n <div className='detailed-status__button'><IconButton className={classNames({ reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' iconComponent={reblogIconComponent} onClick={this.handleReblogClick} /></div>\n <div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={favouriteTitle} icon='star' iconComponent={status.get('favourited') ? StarIcon : StarBorderIcon} onClick={this.handleFavouriteClick} /></div>\n <div className='detailed-status__button'><EmojiPickerDropdown onPickEmoji={this.handleEmojiPick} title={intl.formatMessage(messages.react)} icon={AddReactionIcon} disabled={!canReact} /></div>\n <div className='detailed-status__button'><IconButton className='bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={bookmarkTitle} icon='bookmark' iconComponent={status.get('bookmarked') ? BookmarkIcon : BookmarkBorderIcon} onClick={this.handleBookmarkClick} /></div>\n\n <div className='detailed-status__action-bar-dropdown'>\n <DropdownMenuContainer size={18} icon='ellipsis-h' iconComponent={MoreHorizIcon} items={menu} direction='left' title={intl.formatMessage(messages.more)} />\n </div>\n </div>\n );\n }\n\n}\n\nexport default withIdentity(injectIntl(ActionBar));\n","import PropTypes from 'prop-types';\n\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\n\nimport classNames from 'classnames';\nimport { Helmet } from 'react-helmet';\nimport { withRouter } from 'react-router-dom';\n\nimport { createSelector } from '@reduxjs/toolkit';\nimport { List as ImmutableList } from 'immutable';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { connect } from 'react-redux';\n\nimport { HotKeys } from 'react-hotkeys';\n\nimport ChatIcon from '@/material-icons/400-24px/chat.svg?react';\nimport VisibilityIcon from '@/material-icons/400-24px/visibility.svg?react';\nimport VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react';\nimport { Icon } from 'flavours/glitch/components/icon';\nimport { LoadingIndicator } from 'flavours/glitch/components/loading_indicator';\nimport { TimelineHint } from 'flavours/glitch/components/timeline_hint';\nimport ScrollContainer from 'flavours/glitch/containers/scroll_container';\nimport BundleColumnError from 'flavours/glitch/features/ui/components/bundle_column_error';\nimport { identityContextPropShape, withIdentity } from 'flavours/glitch/identity_context';\nimport { autoUnfoldCW } from 'flavours/glitch/utils/content_warning';\nimport { WithRouterPropTypes } from 'flavours/glitch/utils/react_router';\n\nimport { initBlockModal } from '../../actions/blocks';\nimport {\n replyCompose,\n mentionCompose,\n directCompose,\n} from '../../actions/compose';\nimport {\n toggleFavourite,\n bookmark,\n unbookmark,\n toggleReblog,\n pin,\n unpin,\n addReaction,\n removeReaction,\n} from '../../actions/interactions';\nimport { openModal } from '../../actions/modal';\nimport { initMuteModal } from '../../actions/mutes';\nimport { initReport } from '../../actions/reports';\nimport {\n fetchStatus,\n muteStatus,\n unmuteStatus,\n deleteStatus,\n editStatus,\n hideStatus,\n revealStatus,\n translateStatus,\n undoStatusTranslation,\n} from '../../actions/statuses';\nimport ColumnHeader from '../../components/column_header';\nimport { textForScreenReader, defaultMediaVisibility } from '../../components/status';\nimport StatusContainer from '../../containers/status_container';\nimport { deleteModal } from '../../initial_state';\nimport { makeGetStatus, makeGetPictureInPicture } from '../../selectors';\nimport Column from '../ui/components/column';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';\n\nimport ActionBar from './components/action_bar';\nimport { DetailedStatus } from './components/detailed_status';\n\n\nconst messages = defineMessages({\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 statusTitleWithAttachments: { id: 'status.title.with_attachments', defaultMessage: '{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}' },\n detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },\n tootHeading: { id: 'account.posts_with_replies', defaultMessage: 'Posts and replies' },\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 = ImmutableList();\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 ImmutableList(descendantsIds);\n });\n\n const mapStateToProps = (state, props) => {\n const status = getStatus(state, { id: props.params.statusId });\n\n let ancestorsIds = ImmutableList();\n let descendantsIds = ImmutableList();\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 settings: state.get('local_settings'),\n askReplyConfirmation: state.getIn(['local_settings', 'confirm_before_clearing_draft']) && 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 const arr = Array.from(str);\n if (arr.length > num) {\n return arr.slice(0, num).join('') + '…';\n } else {\n return str;\n }\n};\n\nconst titleFromStatus = (intl, status) => {\n const displayName = status.getIn(['account', 'display_name']);\n const username = status.getIn(['account', 'username']);\n const user = displayName.trim().length === 0 ? username : displayName;\n const text = status.get('search_index');\n const attachmentCount = status.get('media_attachments').size;\n\n return text ? `${user}: \"${truncate(text, 30)}\"` : intl.formatMessage(messages.statusTitleWithAttachments, { user, attachmentCount });\n};\n\nclass Status extends ImmutablePureComponent {\n static propTypes = {\n identity: identityContextPropShape,\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n status: ImmutablePropTypes.map,\n isLoading: PropTypes.bool,\n settings: ImmutablePropTypes.map.isRequired,\n ancestorsIds: ImmutablePropTypes.list.isRequired,\n descendantsIds: ImmutablePropTypes.list.isRequired,\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 ...WithRouterPropTypes\n };\n\n state = {\n fullscreen: false,\n isExpanded: undefined,\n threadExpanded: undefined,\n statusId: undefined,\n loadedStatusId: undefined,\n showMedia: undefined,\n revealBehindCW: undefined,\n };\n\n componentDidMount () {\n attachFullscreenListener(this.onFullScreenChange);\n this.props.dispatch(fetchStatus(this.props.params.statusId));\n this._scrollStatusIntoView();\n }\n\n static getDerivedStateFromProps(props, state) {\n let update = {};\n let updated = false;\n\n if (props.params.statusId && state.statusId !== props.params.statusId) {\n props.dispatch(fetchStatus(props.params.statusId));\n update.threadExpanded = undefined;\n update.statusId = props.params.statusId;\n updated = true;\n }\n\n const revealBehindCW = props.settings.getIn(['media', 'reveal_behind_cw']);\n if (revealBehindCW !== state.revealBehindCW) {\n update.revealBehindCW = revealBehindCW;\n if (revealBehindCW) update.showMedia = defaultMediaVisibility(props.status, props.settings);\n updated = true;\n }\n\n if (props.status && state.loadedStatusId !== props.status.get('id')) {\n update.showMedia = defaultMediaVisibility(props.status, props.settings);\n update.loadedStatusId = props.status.get('id');\n update.isExpanded = autoUnfoldCW(props.settings, props.status);\n updated = true;\n }\n\n return updated ? update : null;\n }\n\n handleToggleHidden = () => {\n const { status } = this.props;\n\n if (this.props.settings.getIn(['content_warnings', 'shared_state'])) {\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 } else if (this.props.status.get('spoiler_text')) {\n this.setExpansion(!this.state.isExpanded);\n }\n };\n\n handleToggleMediaVisibility = () => {\n this.setState({ showMedia: !this.state.showMedia });\n };\n\n\n handleFavouriteClick = (status, e) => {\n const { dispatch } = this.props;\n const { signedIn } = this.props.identity;\n\n if (signedIn) {\n dispatch(toggleFavourite(status.get('id'), e && e.shiftKey));\n } else {\n dispatch(openModal({\n modalType: 'INTERACTION',\n modalProps: {\n type: 'favourite',\n accountId: status.getIn(['account', 'id']),\n url: status.get('uri'),\n },\n }));\n }\n };\n\n handleReactionAdd = (statusId, name, url) => {\n const { dispatch, identity } = this.props;\n const { signedIn } = identity;\n\n if (signedIn) {\n dispatch(addReaction(statusId, name, url));\n }\n };\n\n handleReactionRemove = (statusId, name) => {\n this.props.dispatch(removeReaction(statusId, name));\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 } = this.props;\n const { signedIn } = this.props.identity;\n\n if (signedIn) {\n if (askReplyConfirmation) {\n dispatch(openModal({ modalType: 'CONFIRM_REPLY', modalProps: { status } }));\n } else {\n dispatch(replyCompose(status));\n }\n } else {\n dispatch(openModal({\n modalType: 'INTERACTION',\n modalProps: {\n type: 'reply',\n accountId: status.getIn(['account', 'id']),\n url: status.get('uri'),\n },\n }));\n }\n };\n\n handleReblogClick = (status, e) => {\n const { dispatch } = this.props;\n const { signedIn } = this.props.identity;\n\n if (signedIn) {\n dispatch(toggleReblog(status.get('id'), e && e.shiftKey));\n } else {\n dispatch(openModal({\n modalType: 'INTERACTION',\n modalProps: {\n type: 'reblog',\n accountId: status.getIn(['account', 'id']),\n url: status.get('uri'),\n },\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, withRedraft = false) => {\n const { dispatch } = this.props;\n\n if (!deleteModal) {\n dispatch(deleteStatus(status.get('id'), withRedraft));\n } else {\n dispatch(openModal({ modalType: 'CONFIRM_DELETE_STATUS', modalProps: { statusId: status.get('id'), withRedraft } }));\n }\n };\n\n handleEditClick = (status) => {\n const { dispatch, askReplyConfirmation } = this.props;\n\n if (askReplyConfirmation) {\n dispatch(openModal({ modalType: 'CONFIRM_EDIT_STATUS', modalProps: { statusId: status.get('id') } }));\n } else {\n dispatch(editStatus(status.get('id')));\n }\n };\n\n handleDirectClick = (account) => {\n this.props.dispatch(directCompose(account));\n };\n\n handleMentionClick = (account) => {\n this.props.dispatch(mentionCompose(account));\n };\n\n handleOpenMedia = (media, index, lang) => {\n this.props.dispatch(openModal({\n modalType: 'MEDIA',\n modalProps: { statusId: this.props.status.get('id'), media, index, lang },\n }));\n };\n\n handleOpenVideo = (media, lang, options) => {\n this.props.dispatch(openModal({\n modalType: 'VIDEO',\n modalProps: { statusId: this.props.status.get('id'), media, lang, options },\n }));\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 handleToggleAll = () => {\n const { status, ancestorsIds, descendantsIds, settings } = this.props;\n const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n let { isExpanded } = this.state;\n\n if (settings.getIn(['content_warnings', 'shared_state']))\n isExpanded = !status.get('hidden');\n\n if (!isExpanded) {\n this.props.dispatch(revealStatus(statusIds));\n } else {\n this.props.dispatch(hideStatus(statusIds));\n }\n\n this.setState({ isExpanded: !isExpanded, threadExpanded: !isExpanded });\n };\n\n handleTranslate = status => {\n const { dispatch } = this.props;\n\n if (status.get('translation')) {\n dispatch(undoStatusTranslation(status.get('id'), status.get('poll')));\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({\n modalType: 'EMBED',\n modalProps: { id: status.get('id') },\n }));\n };\n\n handleHotkeyToggleSensitive = () => {\n this.handleToggleMediaVisibility();\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 handleHotkeyBookmark = () => {\n this.handleBookmarkClick(this.props.status);\n };\n\n handleHotkeyMention = e => {\n e.preventDefault();\n this.handleMentionClick(this.props.status);\n };\n\n handleHotkeyOpenProfile = () => {\n this.props.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`);\n };\n\n handleHotkeyTranslate = () => {\n this.handleTranslate(this.props.status);\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 handleHeaderClick = () => {\n this.column.scrollTop();\n };\n\n renderChildren (list, ancestors) {\n const { params: { statusId } } = this.props;\n\n return list.map((id, i) => (\n <StatusContainer\n key={id}\n id={id}\n expanded={this.state.threadExpanded}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n contextType='thread'\n previousId={i > 0 ? list.get(i - 1) : undefined}\n nextId={list.get(i + 1) || (ancestors && statusId)}\n rootId={statusId}\n />\n ));\n }\n\n setExpansion = value => {\n this.setState({ isExpanded: value });\n };\n\n setContainerRef = c => {\n this.node = c;\n };\n\n setColumnRef = c => {\n this.column = c;\n };\n\n setStatusRef = c => {\n this.statusNode = c;\n };\n\n _scrollStatusIntoView () {\n const { status, multiColumn } = this.props;\n\n if (status) {\n requestIdleCallback(() => {\n this.statusNode?.scrollIntoView(true);\n\n // In the single-column interface, `scrollIntoView` will put the post behind the header,\n // so compensate for that.\n if (!multiColumn) {\n const offset = document.querySelector('.column-header__wrapper')?.getBoundingClientRect()?.bottom;\n if (offset) {\n const scrollingElement = document.scrollingElement || document.body;\n scrollingElement.scrollBy(0, -offset);\n }\n }\n });\n }\n }\n\n componentDidUpdate (prevProps) {\n const { status, ancestorsIds } = this.props;\n\n if (status && (ancestorsIds.size > prevProps.ancestorsIds.size || prevProps.status?.get('id') !== status.get('id'))) {\n this._scrollStatusIntoView();\n }\n }\n\n componentWillUnmount () {\n detachFullscreenListener(this.onFullScreenChange);\n }\n\n onFullScreenChange = () => {\n this.setState({ fullscreen: isFullscreen() });\n };\n\n shouldUpdateScroll = (prevRouterProps, { location }) => {\n // Do not change scroll when opening a modal\n if (location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey) {\n return false;\n }\n\n // Scroll to focused post if it is loaded\n if (this.statusNode) {\n return [0, this.statusNode.offsetTop];\n }\n\n // Do not scroll otherwise, `componentDidUpdate` will take care of that\n return false;\n };\n\n render () {\n let ancestors, descendants, remoteHint;\n const { isLoading, status, settings, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props;\n const { fullscreen } = this.state;\n\n if (isLoading) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n if (status === null) {\n return (\n <BundleColumnError multiColumn={multiColumn} errorType='routing' />\n );\n }\n\n const isExpanded = settings.getIn(['content_warnings', 'shared_state']) ? !status.get('hidden') : this.state.isExpanded;\n\n if (ancestorsIds && ancestorsIds.size > 0) {\n ancestors = <>{this.renderChildren(ancestorsIds, true)}</>;\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 if (!isLocal) {\n remoteHint = (\n <TimelineHint\n className={classNames(!!descendants && 'timeline-hint--with-descendants')}\n url={status.get('url')}\n message={<FormattedMessage id='hints.threads.replies_may_be_missing' defaultMessage='Replies from other servers may be missing.' />}\n label={<FormattedMessage id='hints.threads.see_more' defaultMessage='See more replies on {domain}' values={{ domain: <strong>{status.getIn(['account', 'acct']).split('@')[1]}</strong> }} />}\n />\n );\n }\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 bookmark: this.handleHotkeyBookmark,\n mention: this.handleHotkeyMention,\n openProfile: this.handleHotkeyOpenProfile,\n toggleHidden: this.handleToggleHidden,\n toggleSensitive: this.handleHotkeyToggleSensitive,\n openMedia: this.handleHotkeyOpenMedia,\n onTranslate: this.handleHotkeyTranslate,\n };\n\n return (\n <Column bindToDocument={!multiColumn} ref={this.setColumnRef} label={intl.formatMessage(messages.detailedStatus)}>\n <ColumnHeader\n icon='comment'\n iconComponent={ChatIcon}\n title={intl.formatMessage(messages.tootHeading)}\n onClick={this.handleHeaderClick}\n showBackButton\n multiColumn={multiColumn}\n extraButton={(\n <button type='button' className='column-header__button' title={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll}><Icon id={!isExpanded ? 'eye-slash' : 'eye'} icon={isExpanded ? VisibilityOffIcon : VisibilityIcon} /></button>\n )}\n />\n\n <ScrollContainer scrollKey='thread' shouldUpdateScroll={this.shouldUpdateScroll}>\n <div className={classNames('scrollable', { fullscreen })} ref={this.setContainerRef}>\n {ancestors}\n\n <HotKeys handlers={handlers}>\n <div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex={0} aria-label={textForScreenReader(intl, status, false, isExpanded)} ref={this.setStatusRef}>\n <DetailedStatus\n key={`details-${status.get('id')}`}\n status={status}\n settings={settings}\n onOpenVideo={this.handleOpenVideo}\n onOpenMedia={this.handleOpenMedia}\n onReactionAdd={this.handleReactionAdd}\n onReactionRemove={this.handleReactionRemove}\n expanded={isExpanded}\n onToggleHidden={this.handleToggleHidden}\n onTranslate={this.handleTranslate}\n domain={domain}\n showMedia={this.state.showMedia}\n onToggleMediaVisibility={this.handleToggleMediaVisibility}\n pictureInPicture={pictureInPicture}\n />\n\n <ActionBar\n key={`action-bar-${status.get('id')}`}\n status={status}\n onReply={this.handleReplyClick}\n onFavourite={this.handleFavouriteClick}\n onReactionAdd={this.handleReactionAdd}\n onReblog={this.handleReblogClick}\n onBookmark={this.handleBookmarkClick}\n onDelete={this.handleDeleteClick}\n onEdit={this.handleEditClick}\n onDirect={this.handleDirectClick}\n onMention={this.handleMentionClick}\n onMute={this.handleMuteClick}\n onMuteConversation={this.handleConversationMuteClick}\n onBlock={this.handleBlockClick}\n onReport={this.handleReport}\n onPin={this.handlePin}\n onEmbed={this.handleEmbed}\n />\n </div>\n </HotKeys>\n\n {descendants}\n {remoteHint}\n </div>\n </ScrollContainer>\n\n <Helmet>\n <title>{titleFromStatus(intl, status)}</title>\n <meta name='robots' content={(isLocal && isIndexable) ? 'all' : 'noindex'} />\n <link rel='canonical' href={status.get('url')} />\n </Helmet>\n </Column>\n );\n }\n\n}\n\nexport default withRouter(injectIntl(connect(makeMapStateToProps)(withIdentity(Status))));\n"],"sourceRoot":""}