{"version":3,"sources":["webpack:///app/javascript/home/glitch/glitch-v4-3-4/app/javascript/flavours/glitch/components/edited_timestamp/containers/dropdown_menu_container.js","webpack:///app/javascript/home/glitch/glitch-v4-3-4/app/javascript/flavours/glitch/components/edited_timestamp/index.jsx","webpack:///app/javascript/home/glitch/glitch-v4-3-4/app/javascript/flavours/glitch/features/status/components/detailed_status.tsx","webpack:///./app/javascript/material-icons/400-24px/chat.svg","webpack:///app/javascript/home/glitch/glitch-v4-3-4/app/javascript/flavours/glitch/features/status/components/action_bar.jsx","webpack:///app/javascript/home/glitch/glitch-v4-3-4/app/javascript/flavours/glitch/features/status/index.jsx"],"names":["connect","mapStateToProps","state","_ref","statusId","openDropdownId","dropdownMenu","openId","openedViaKeyboard","keyboard","items","getIn","loading","mapDispatchToProps","dispatch","_ref2","onOpen","id","onItemClick","fetchHistory","openDropdownMenu","onClose","closeDropdownMenu","DropdownMenu","EditedTimestamp","PureComponent","constructor","arguments","_defineProperty","item","i","this","props","_jsx","FormattedMessage","defaultMessage","values","count","size","index","onClick","onKeyPress","formattedDate","RelativeTimestamp","timestamp","get","short","formattedName","InlineAccount","accountId","label","name","date","className","render","intl","renderItem","scrollable","renderHeader","handleItemClick","formatDate","month","day","hour","minute","openModal","modalType","modalProps","injectIntl","DetailedStatus","_status$get","status","onOpenMedia","onOpenVideo","onTranslate","measureHeight","onHeightChange","domain","showMedia","withLogo","pictureInPicture","onToggleMediaVisibility","onToggleHidden","expanded","properStatus","height","setHeight","useState","nodeRef","useRef","history","useAppHistory","rewriteMentions","useAppSelector","local_settings","tagMisleadingLinks","mediaOutsideCW","letterboxMedia","fullwidthMedia","handleOpenVideo","useCallback","options","lang","_measureHeight","heightJustChanged","current","scheduleIdleTask","Math","ceil","scrollHeight","handleRef","c","handleChildUpdate","handleTranslate","parseClick","e","destination","button","ctrlKey","altKey","metaKey","preventDefault","push","stopPropagation","applicationLink","reblogLink","contentMedia","contentMediaIcons","extraMedia","media","mediaIcons","outerStyle","boxSizing","language","PictureInPicturePlaceholder","some","AttachmentList","includes","MediaGallery","standalone","sensitive","letterbox","fullwidth","hidden","visible","onToggleVisibility","attachment","description","Audio","src","alt","duration","poster","backgroundColor","foregroundColor","accentColor","blurhash","Video","preview","frameRate","aspectRatio","inline","width","preventPlayback","length","Card","card","PollContainer","pollId","_jsxs","_Fragment","children","href","target","rel","visibilityLink","VisibilityIcon","visibility","Link","to","AnimatedNumber","value","favouriteLink","statusContentProps","hashtagBar","getHashtagBarForStatus","style","ref","classNames","Permalink","Avatar","account","DisplayName","localDomain","IconLogo","_jsx2","StatusContent","collapsed","onExpandedToggle","onUpdate","tagLinks","disabled","FormattedDate","Date","year","_path","_extends","Object","assign","bind","n","t","r","hasOwnProperty","call","apply","title","titleId","xmlns","viewBox","fill","d","messages","defineMessages","delete","redraft","edit","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","bookmark","more","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","admin_domain","copy","openOriginalPage","ActionBar","onReply","onReblog","onFavourite","onBookmark","onDelete","onEdit","onDirect","onMention","onMute","onBlock","onMuteConversation","onReport","onPin","navigator","url","onEmbed","clipboard","writeText","signedIn","permissions","identity","publicStatus","pinnableStatus","mutingConversation","writtenByMe","me","isRemote","replyIcon","replyIconComponent","menu","text","formatMessage","action","handleCopy","handleShare","handleEmbed","handlePinClick","handleConversationMuteClick","handleEditClick","handleDeleteClick","dangerous","handleRedraftClick","handleMentionClick","handleDirectClick","handleMuteClick","handleBlockClick","handleReport","PERMISSION_MANAGE_USERS","accountAdminLink","statusAdminLink","PERMISSION_MANAGE_FEDERATION","undefined","split","ReplyIcon","ReplyAllIcon","reblogPrivate","reblogTitle","reblogIconComponent","RepeatActiveIcon","RepeatPrivateActiveIcon","RepeatIcon","RepeatPrivateIcon","RepeatDisabledIcon","IconButton","icon","iconComponent","handleReplyClick","active","handleReblogClick","animate","StarIcon","StarBorderIcon","handleFavouriteClick","BookmarkIcon","BookmarkBorderIcon","handleBookmarkClick","DropdownMenuContainer","MoreHorizIcon","direction","withIdentity","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","loadedStatusId","revealBehindCW","settings","revealStatus","hideStatus","setExpansion","setState","toggleFavourite","shiftKey","type","askReplyConfirmation","replyCompose","toggleReblog","unbookmark","withRedraft","deleteModal","deleteStatus","editStatus","directCompose","mentionCompose","startTime","handleOpenMedia","initMuteModal","unmuteStatus","muteStatus","ancestorsIds","descendantsIds","statusIds","concat","toJS","undoStatusTranslation","translateStatus","initBlockModal","initReport","handleToggleMediaVisibility","handleMoveUp","handleMoveDown","_selectChild","indexOf","column","scrollTop","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","StatusContainer","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","Column","LoadingIndicator","BundleColumnError","errorType","isLocal","isIndexable","TimelineHint","message","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyBookmark","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleHidden","handleToggleHidden","toggleSensitive","handleHotkeyToggleSensitive","openMedia","handleHotkeyOpenMedia","bindToDocument","setColumnRef","ColumnHeader","ChatIcon","handleHeaderClick","showBackButton","extraButton","handleToggleAll","Icon","VisibilityOffIcon","ScrollContainer","scrollKey","shouldUpdateScroll","setContainerRef","HotKeys","tabIndex","textForScreenReader","setStatusRef","handlePin","Helmet","content","identityContextPropShape","PropTypes","object","isRequired","func","ImmutablePropTypes","bool","string","contains","inUse","available","WithRouterPropTypes","withRouter","makeMapStateToProps","getStatus","makeGetStatus","getPictureInPicture","makeGetPictureInPicture","getAncestorsIds","createSelector","_","inReplyTos","Immutable","List","withMutations","mutable","unshift","getDescendantsIds","contextReplies","statuses","ids","pop","replies","reverse","forEach","insertAt","findIndex","idx","splice"],"mappings":"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","file":"js/flavours/glitch/async/status-8ccbf7d1a86fa3c6c99a.chunk.js","sourcesContent":["import { connect } from 'react-redux';\n\nimport { openDropdownMenu, closeDropdownMenu } from 'flavours/glitch/actions/dropdown_menu';\nimport { fetchHistory } from 'flavours/glitch/actions/history';\nimport DropdownMenu from 'flavours/glitch/components/dropdown_menu';\n\n/**\n *\n * @param {import('flavours/glitch/store').RootState} state\n * @param {*} props\n */\nconst mapStateToProps = (state, { statusId }) => ({\n openDropdownId: state.dropdownMenu.openId,\n openedViaKeyboard: state.dropdownMenu.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 PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage, injectIntl } from 'react-intl';\n\nimport { connect } from 'react-redux';\n\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport InlineAccount from 'flavours/glitch/components/inline_account';\nimport { RelativeTimestamp } from 'flavours/glitch/components/relative_timestamp';\n\nimport DropdownMenu from './containers/dropdown_menu_container';\n\nconst mapDispatchToProps = (dispatch, { statusId }) => ({\n\n onItemClick (index) {\n dispatch(openModal({\n modalType: 'COMPARE_HISTORY',\n modalProps: { index, statusId },\n }));\n },\n\n});\n\nclass EditedTimestamp extends 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 <FormattedMessage id='status.edited_x_times' defaultMessage='Edited {count, plural, one {# time} other {# times}}' values={{ count: items.size - 1 }} />\n );\n };\n\n renderItem = (item, index, { onClick, onKeyPress }) => {\n const formattedDate = <RelativeTimestamp timestamp={item.get('created_at')} short={false} />;\n const formattedName = <InlineAccount accountId={item.get('account')} />;\n\n const label = item.get('original') ? (\n <FormattedMessage id='status.history.created' defaultMessage='{name} created {date}' values={{ name: formattedName, date: formattedDate }} />\n ) : (\n <FormattedMessage id='status.history.edited' defaultMessage='{name} edited {date}' values={{ name: formattedName, date: formattedDate }} />\n );\n\n return (\n <li className='dropdown-menu__item edited-timestamp__history__item' key={item.get('created_at')}>\n <button data-index={index} onClick={onClick} onKeyPress={onKeyPress}>{label}</button>\n </li>\n );\n };\n\n render () {\n const { timestamp, intl, statusId } = this.props;\n\n return (\n <DropdownMenu statusId={statusId} renderItem={this.renderItem} scrollable renderHeader={this.renderHeader} onItemClick={this.handleItemClick}>\n <button className='dropdown-menu__text-button'>\n <FormattedMessage id='status.edited' defaultMessage='Edited {date}' values={{ date: <span className='animated-number'>{intl.formatDate(timestamp, { month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' })}</span> }} />\n </button>\n </DropdownMenu>\n );\n }\n\n}\n\nexport default connect(null, mapDispatchToProps)(injectIntl(EditedTimestamp));\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access,\n @typescript-eslint/no-unsafe-call,\n @typescript-eslint/no-explicit-any,\n @typescript-eslint/no-unsafe-assignment */\n\nimport type { CSSProperties } from 'react';\nimport { useState, useRef, useCallback } from 'react';\n\nimport { FormattedDate, FormattedMessage } from 'react-intl';\n\nimport classNames from 'classnames';\nimport { Link } from 'react-router-dom';\n\nimport { AnimatedNumber } from 'flavours/glitch/components/animated_number';\nimport AttachmentList from 'flavours/glitch/components/attachment_list';\nimport EditedTimestamp from 'flavours/glitch/components/edited_timestamp';\nimport type { StatusLike } from 'flavours/glitch/components/hashtag_bar';\nimport { getHashtagBarForStatus } from 'flavours/glitch/components/hashtag_bar';\nimport { IconLogo } from 'flavours/glitch/components/logo';\nimport { Permalink } from 'flavours/glitch/components/permalink';\nimport PictureInPicturePlaceholder from 'flavours/glitch/components/picture_in_picture_placeholder';\nimport { useAppHistory } from 'flavours/glitch/components/router';\nimport { VisibilityIcon } from 'flavours/glitch/components/visibility_icon';\nimport PollContainer from 'flavours/glitch/containers/poll_container';\nimport { useAppSelector } from 'flavours/glitch/store';\n\nimport { Avatar } from '../../../components/avatar';\nimport { DisplayName } from '../../../components/display_name';\nimport MediaGallery from '../../../components/media_gallery';\nimport StatusContent from '../../../components/status_content';\nimport Audio from '../../audio';\nimport scheduleIdleTask from '../../ui/util/schedule_idle_task';\nimport Video from '../../video';\n\nimport Card from './card';\n\ninterface VideoModalOptions {\n startTime: number;\n autoPlay?: boolean;\n defaultVolume: number;\n componentIndex: number;\n}\n\nexport const DetailedStatus: React.FC<{\n status: any;\n onOpenMedia?: (status: any, index: number, lang: string) => void;\n onOpenVideo?: (status: any, lang: string, options: VideoModalOptions) => void;\n onTranslate?: (status: any) => void;\n measureHeight?: boolean;\n onHeightChange?: () => void;\n domain: string;\n showMedia?: boolean;\n withLogo?: boolean;\n pictureInPicture: any;\n onToggleHidden?: (status: any) => void;\n onToggleMediaVisibility?: () => void;\n expanded: boolean;\n}> = ({\n status,\n onOpenMedia,\n onOpenVideo,\n onTranslate,\n measureHeight,\n onHeightChange,\n domain,\n showMedia,\n withLogo,\n pictureInPicture,\n onToggleMediaVisibility,\n onToggleHidden,\n expanded,\n}) => {\n const properStatus = status?.get('reblog') ?? status;\n const [height, setHeight] = useState(0);\n const nodeRef = useRef<HTMLDivElement>();\n const history = useAppHistory();\n\n const rewriteMentions = useAppSelector(\n (state) => state.local_settings.get('rewrite_mentions', false) as boolean,\n );\n const tagMisleadingLinks = useAppSelector(\n (state) =>\n state.local_settings.get('tag_misleading_links', false) as boolean,\n );\n const mediaOutsideCW = useAppSelector(\n (state) =>\n state.local_settings.getIn(\n ['content_warnings', 'media_outside'],\n false,\n ) as boolean,\n );\n const letterboxMedia = useAppSelector(\n (state) =>\n state.local_settings.getIn(['media', 'letterbox'], false) as boolean,\n );\n const fullwidthMedia = useAppSelector(\n (state) =>\n state.local_settings.getIn(['media', 'fullwidth'], false) as boolean,\n );\n\n const handleOpenVideo = useCallback(\n (options: VideoModalOptions) => {\n const lang = (status.getIn(['translation', 'language']) ||\n status.get('language')) as string;\n if (onOpenVideo)\n onOpenVideo(status.getIn(['media_attachments', 0]), lang, options);\n },\n [onOpenVideo, status],\n );\n\n const _measureHeight = useCallback(\n (heightJustChanged?: boolean) => {\n if (measureHeight && nodeRef.current) {\n scheduleIdleTask(() => {\n if (nodeRef.current)\n setHeight(Math.ceil(nodeRef.current.scrollHeight) + 1);\n });\n\n if (onHeightChange && heightJustChanged) {\n onHeightChange();\n }\n }\n },\n [onHeightChange, measureHeight, setHeight],\n );\n\n const handleRef = useCallback(\n (c: HTMLDivElement) => {\n nodeRef.current = c;\n _measureHeight();\n },\n [_measureHeight],\n );\n\n const handleChildUpdate = useCallback(() => {\n _measureHeight();\n }, [_measureHeight]);\n\n const handleTranslate = useCallback(() => {\n if (onTranslate) onTranslate(status);\n }, [onTranslate, status]);\n\n const parseClick = useCallback(\n (e: React.MouseEvent, destination: string) => {\n if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey)) {\n e.preventDefault();\n history.push(destination);\n }\n\n e.stopPropagation();\n },\n [history],\n );\n\n if (!properStatus) {\n return null;\n }\n\n let applicationLink;\n let reblogLink;\n\n // Depending on user settings, some media are considered as parts of the\n // contents (affected by CW) while other will be displayed outside of the\n // CW.\n const contentMedia: React.ReactNode[] = [];\n const contentMediaIcons: string[] = [];\n const extraMedia: React.ReactNode[] = [];\n const extraMediaIcons: string[] = [];\n let media = contentMedia;\n let mediaIcons: string[] = contentMediaIcons;\n\n if (mediaOutsideCW) {\n media = extraMedia;\n mediaIcons = extraMediaIcons;\n }\n\n const outerStyle = { boxSizing: 'border-box' } as CSSProperties;\n\n if (measureHeight) {\n outerStyle.height = height;\n }\n\n const language =\n status.getIn(['translation', 'language']) || status.get('language');\n\n if (pictureInPicture.get('inUse')) {\n media.push(<PictureInPicturePlaceholder />);\n mediaIcons.push('video-camera');\n } else if (status.get('media_attachments').size > 0) {\n if (\n status\n .get('media_attachments')\n .some(\n (item: Immutable.Map<string, any>) => item.get('type') === 'unknown',\n )\n ) {\n media.push(<AttachmentList media={status.get('media_attachments')} />);\n } else if (\n ['image', 'gifv', 'unknown'].includes(\n status.getIn(['media_attachments', 0, 'type']) as string,\n ) ||\n status.get('media_attachments').size > 1\n ) {\n media.push(\n <MediaGallery\n standalone\n sensitive={status.get('sensitive')}\n media={status.get('media_attachments')}\n lang={language}\n height={300}\n letterbox={letterboxMedia}\n fullwidth={fullwidthMedia}\n hidden={!expanded}\n onOpenMedia={onOpenMedia}\n visible={showMedia}\n onToggleVisibility={onToggleMediaVisibility}\n />,\n );\n mediaIcons.push('picture-o');\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n const attachment = status.getIn(['media_attachments', 0]);\n const description =\n attachment.getIn(['translation', 'description']) ||\n attachment.get('description');\n\n media.push(\n <Audio\n src={attachment.get('url')}\n alt={description}\n lang={language}\n duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n poster={\n attachment.get('preview_url') ||\n status.getIn(['account', 'avatar_static'])\n }\n backgroundColor={attachment.getIn(['meta', 'colors', 'background'])}\n foregroundColor={attachment.getIn(['meta', 'colors', 'foreground'])}\n accentColor={attachment.getIn(['meta', 'colors', 'accent'])}\n sensitive={status.get('sensitive')}\n visible={showMedia}\n blurhash={attachment.get('blurhash')}\n height={150}\n onToggleVisibility={onToggleMediaVisibility}\n />,\n );\n mediaIcons.push('music');\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const attachment = status.getIn(['media_attachments', 0]);\n const description =\n attachment.getIn(['translation', 'description']) ||\n attachment.get('description');\n\n media.push(\n <Video\n preview={attachment.get('preview_url')}\n frameRate={attachment.getIn(['meta', 'original', 'frame_rate'])}\n aspectRatio={`${attachment.getIn(['meta', 'original', 'width'])} / ${attachment.getIn(['meta', 'original', 'height'])}`}\n blurhash={attachment.get('blurhash')}\n src={attachment.get('url')}\n alt={description}\n lang={language}\n inline\n width={300}\n height={150}\n onOpenVideo={handleOpenVideo}\n sensitive={status.get('sensitive')}\n visible={showMedia}\n onToggleVisibility={onToggleMediaVisibility}\n letterbox={letterboxMedia}\n fullwidth={fullwidthMedia}\n preventPlayback={!expanded}\n />,\n );\n mediaIcons.push('video-camera');\n }\n } else if (status.get('spoiler_text').length === 0) {\n media.push(\n <Card\n sensitive={status.get('sensitive')}\n onOpenMedia={onOpenMedia}\n card={status.get('card', null)}\n />,\n );\n mediaIcons.push('link');\n }\n\n if (status.get('poll')) {\n contentMedia.push(\n <PollContainer\n pollId={status.get('poll')}\n // @ts-expect-error -- Poll/PollContainer is not typed yet\n lang={status.get('language')}\n />,\n );\n contentMediaIcons.push('tasks');\n }\n\n if (status.get('application')) {\n applicationLink = (\n <>\n ·\n <a\n className='detailed-status__application'\n href={status.getIn(['application', 'website'])}\n target='_blank'\n rel='noopener noreferrer'\n >\n {status.getIn(['application', 'name'])}\n </a>\n </>\n );\n }\n\n const visibilityLink = (\n <>\n ·<VisibilityIcon visibility={status.get('visibility')} />\n </>\n );\n\n if (['private', 'direct'].includes(status.get('visibility') as string)) {\n reblogLink = '';\n } else {\n reblogLink = (\n <Link\n to={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}/reblogs`}\n className='detailed-status__link'\n >\n <span className='detailed-status__reblogs'>\n <AnimatedNumber value={status.get('reblogs_count')} />\n </span>\n <FormattedMessage\n id='status.reblogs'\n defaultMessage='{count, plural, one {boost} other {boosts}}'\n values={{ count: status.get('reblogs_count') }}\n />\n </Link>\n );\n }\n\n const favouriteLink = (\n <Link\n to={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}/favourites`}\n className='detailed-status__link'\n >\n <span className='detailed-status__favorites'>\n <AnimatedNumber value={status.get('favourites_count')} />\n </span>\n <FormattedMessage\n id='status.favourites'\n defaultMessage='{count, plural, one {favorite} other {favorites}}'\n values={{ count: status.get('favourites_count') }}\n />\n </Link>\n );\n\n const { statusContentProps, hashtagBar } = getHashtagBarForStatus(\n status as StatusLike,\n );\n contentMedia.push(hashtagBar);\n\n return (\n <div style={outerStyle}>\n <div\n ref={handleRef}\n className={classNames(\n 'detailed-status',\n `detailed-status-${status.get('visibility')}`,\n )}\n data-status-by={status.getIn(['account', 'acct'])}\n >\n <Permalink\n to={`/@${status.getIn(['account', 'acct'])}`}\n href={status.getIn(['account', 'url'])}\n data-hover-card-account={status.getIn(['account', 'id'])}\n className='detailed-status__display-name'\n >\n <div className='detailed-status__display-avatar'>\n <Avatar account={status.get('account')} size={46} />\n </div>\n <DisplayName account={status.get('account')} localDomain={domain} />\n {withLogo && (\n <>\n <div className='spacer' />\n <IconLogo />\n </>\n )}\n </Permalink>\n\n <StatusContent\n status={status}\n media={contentMedia}\n extraMedia={extraMedia}\n mediaIcons={contentMediaIcons}\n expanded={expanded}\n collapsed={false}\n onExpandedToggle={onToggleHidden}\n onTranslate={handleTranslate}\n onUpdate={handleChildUpdate}\n tagLinks={tagMisleadingLinks}\n rewriteMentions={rewriteMentions}\n parseClick={parseClick}\n disabled\n {...(statusContentProps as any)}\n />\n\n <div className='detailed-status__meta'>\n <div className='detailed-status__meta__line'>\n <a\n className='detailed-status__datetime'\n href={status.get('url')}\n target='_blank'\n rel='noopener noreferrer'\n >\n <FormattedDate\n value={new Date(status.get('created_at') as string)}\n year='numeric'\n month='short'\n day='2-digit'\n hour='2-digit'\n minute='2-digit'\n />\n </a>\n\n {visibilityLink}\n {applicationLink}\n </div>\n\n {status.get('edited_at') && (\n <div className='detailed-status__meta__line'>\n <EditedTimestamp\n statusId={status.get('id')}\n timestamp={status.get('edited_at')}\n />\n </div>\n )}\n\n <div className='detailed-status__meta__line'>\n {reblogLink}\n {reblogLink && <>·</>}\n {favouriteLink}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","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 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 } from '../../../initial_state';\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 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: '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 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 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 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 reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';\n\n let reblogTitle, reblogIconComponent;\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 <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={intl.formatMessage(messages.favourite)} icon='star' iconComponent={status.get('favourited') ? StarIcon : StarBorderIcon} onClick={this.handleFavouriteClick} /></div>\n <div className='detailed-status__button'><IconButton className='bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} 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 Immutable 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} 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 = 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 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 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 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 };\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 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 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":""}