-{"version":3,"sources":["webpack:///features/status.js","webpack:///./app/javascript/mastodon/features/status/components/detailed_status.js","webpack:///./app/javascript/mastodon/features/status/containers/card_container.js","webpack:///./app/javascript/mastodon/features/status/components/action_bar.js","webpack:///./app/javascript/mastodon/features/ui/components/column_header.js","webpack:///./app/javascript/mastodon/features/ui/components/column.js","webpack:///./app/javascript/mastodon/components/column_back_button.js","webpack:///./app/javascript/mastodon/containers/status_container.js","webpack:///./app/javascript/mastodon/components/media_gallery.js","webpack:///./app/javascript/mastodon/features/status/index.js","webpack:///./app/javascript/mastodon/components/missing_indicator.js","webpack:///./app/javascript/mastodon/features/status/components/card.js","webpack:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js"],"names":["webpackJsonp","1007","module","__webpack_exports__","__webpack_require__","d","DetailedStatus","_class","_temp2","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default","n","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default","__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__","__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default","__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__","__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default","__WEBPACK_IMPORTED_MODULE_4_react__","__WEBPACK_IMPORTED_MODULE_5_prop_types__","__WEBPACK_IMPORTED_MODULE_5_prop_types___default","__WEBPACK_IMPORTED_MODULE_6_react_immutable_proptypes__","__WEBPACK_IMPORTED_MODULE_6_react_immutable_proptypes___default","__WEBPACK_IMPORTED_MODULE_7__components_avatar__","__WEBPACK_IMPORTED_MODULE_8__components_display_name__","__WEBPACK_IMPORTED_MODULE_9__components_status_content__","__WEBPACK_IMPORTED_MODULE_10__components_media_gallery__","__WEBPACK_IMPORTED_MODULE_11__components_attachment_list__","__WEBPACK_IMPORTED_MODULE_12_react_router_dom__","__WEBPACK_IMPORTED_MODULE_13_react_intl__","__WEBPACK_IMPORTED_MODULE_14__containers_card_container__","__WEBPACK_IMPORTED_MODULE_15_react_immutable_pure_component__","__WEBPACK_IMPORTED_MODULE_15_react_immutable_pure_component___default","__WEBPACK_IMPORTED_MODULE_16__video__","_ImmutablePureCompone","_temp","_this","_ret","this","_len","arguments","length","args","Array","_key","call","apply","concat","handleAccountClick","e","button","preventDefault","context","router","history","push","props","status","getIn","stopPropagation","handleOpenVideo","media","startTime","onOpenVideo","handleExpandedToggle","onToggleHidden","prototype","render","get","applicationLink","reblogLink","reblogIcon","size","some","item","video","preview","src","width","height","inline","sensitive","standalone","onOpenMedia","statusId","className","href","target","rel","to","value","onClick","account","expanded","onExpandedToggle","Date","hour12","year","month","day","hour","minute","a","contextTypes","object","propTypes","map","isRequired","func","1008","__WEBPACK_IMPORTED_MODULE_0_react_redux__","__WEBPACK_IMPORTED_MODULE_1__components_card__","mapStateToProps","state","_ref","card","Object","1009","ActionBar","_class2","__WEBPACK_IMPORTED_MODULE_4_react___default","__WEBPACK_IMPORTED_MODULE_6__components_icon_button__","__WEBPACK_IMPORTED_MODULE_7__containers_dropdown_menu_container__","__WEBPACK_IMPORTED_MODULE_8_react_intl__","__WEBPACK_IMPORTED_MODULE_9__initial_state__","messages","delete","id","defaultMessage","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","_React$PureComponent","handleReplyClick","onReply","handleReblogClick","onReblog","handleFavouriteClick","onFavourite","handleDeleteClick","onDelete","handleDirectClick","onDirect","handleMentionClick","onMention","handleMuteClick","onMute","handleConversationMuteClick","onMuteConversation","handleBlockClick","onBlock","handleReport","onReport","handlePinClick","onPin","handleShare","navigator","text","url","handleEmbed","onEmbed","_props","intl","publicStatus","includes","menu","formatMessage","action","name","shareButton","title","icon","reblog_disabled","disabled","active","animate","items","direction","PureComponent","153","ColumnHeader","__WEBPACK_IMPORTED_MODULE_5_classnames__","__WEBPACK_IMPORTED_MODULE_5_classnames___default","handleClick","type","columnHeaderId","iconElement","283","Column","__WEBPACK_IMPORTED_MODULE_4_lodash_debounce__","__WEBPACK_IMPORTED_MODULE_4_lodash_debounce___default","__WEBPACK_IMPORTED_MODULE_5_react__","__WEBPACK_IMPORTED_MODULE_5_react___default","__WEBPACK_IMPORTED_MODULE_6__column_header__","__WEBPACK_IMPORTED_MODULE_7__scroll__","__WEBPACK_IMPORTED_MODULE_8__is_mobile__","handleHeaderClick","scrollable","node","querySelector","_interruptScrollAnimation","handleScroll","setRef","c","scrollTop","heading","children","hideHeadingOnMobile","showHeading","window","innerWidth","replace","header","createElement","ref","role","aria-labelledby","onScroll","285","ColumnBackButton","__WEBPACK_IMPORTED_MODULE_5_react_intl__","__WEBPACK_IMPORTED_MODULE_6_prop_types__","__WEBPACK_IMPORTED_MODULE_6_prop_types___default","goBack","286","__WEBPACK_IMPORTED_MODULE_1_react__","__WEBPACK_IMPORTED_MODULE_2_react_redux__","__WEBPACK_IMPORTED_MODULE_3__components_status__","__WEBPACK_IMPORTED_MODULE_4__selectors__","__WEBPACK_IMPORTED_MODULE_5__actions_compose__","__WEBPACK_IMPORTED_MODULE_6__actions_interactions__","__WEBPACK_IMPORTED_MODULE_7__actions_accounts__","__WEBPACK_IMPORTED_MODULE_8__actions_statuses__","__WEBPACK_IMPORTED_MODULE_9__actions_mutes__","__WEBPACK_IMPORTED_MODULE_10__actions_reports__","__WEBPACK_IMPORTED_MODULE_11__actions_modal__","__WEBPACK_IMPORTED_MODULE_12_react_intl__","__WEBPACK_IMPORTED_MODULE_13__initial_state__","__WEBPACK_IMPORTED_MODULE_14__actions_alerts__","deleteConfirm","deleteMessage","blockConfirm","makeMapStateToProps","getStatus","mapDispatchToProps","dispatch","onModalReblog","shiftKey","onError","error","message","confirm","onConfirm","index","time","values","820","defineProperty","MediaGallery","_class3","_temp4","__WEBPACK_IMPORTED_MODULE_5_immutable__","__WEBPACK_IMPORTED_MODULE_6__icon_button__","__WEBPACK_IMPORTED_MODULE_7_react_intl__","__WEBPACK_IMPORTED_MODULE_9_classnames__","__WEBPACK_IMPORTED_MODULE_9_classnames___default","__WEBPACK_IMPORTED_MODULE_10__initial_state__","toggle_visible","Item","handleMouseEnter","hoverToPlay","play","handleMouseLeave","pause","currentTime","_this$props","attachment","displayWidth","top","left","bottom","right","thumbnail","previewUrl","previewWidth","originalUrl","originalWidth","hasSize","srcSet","sizes","focusX","focusY","x","y","alt","style","objectPosition","aria-label","loop","controls","autoPlay","autoplay","onMouseEnter","onMouseLeave","muted","defaultProps","_React$PureComponent2","_temp3","_this2","_ret2","_len2","_key2","visible","handleOpen","setState","handleRef","offsetWidth","componentWillReceiveProps","nextProps","isStandaloneEligible","_props2","_this3","_props3","_state","take","i","warning","spoiler-button--visible","overlay","833","Status","_dec","__WEBPACK_IMPORTED_MODULE_4_immutable__","__WEBPACK_IMPORTED_MODULE_4_immutable___default","__WEBPACK_IMPORTED_MODULE_6_react_redux__","__WEBPACK_IMPORTED_MODULE_7_prop_types__","__WEBPACK_IMPORTED_MODULE_7_prop_types___default","__WEBPACK_IMPORTED_MODULE_8_classnames__","__WEBPACK_IMPORTED_MODULE_8_classnames___default","__WEBPACK_IMPORTED_MODULE_9_react_immutable_proptypes__","__WEBPACK_IMPORTED_MODULE_9_react_immutable_proptypes___default","__WEBPACK_IMPORTED_MODULE_10__actions_statuses__","__WEBPACK_IMPORTED_MODULE_11__components_missing_indicator__","__WEBPACK_IMPORTED_MODULE_12__components_detailed_status__","__WEBPACK_IMPORTED_MODULE_13__components_action_bar__","__WEBPACK_IMPORTED_MODULE_14__ui_components_column__","__WEBPACK_IMPORTED_MODULE_15__actions_interactions__","__WEBPACK_IMPORTED_MODULE_16__actions_compose__","__WEBPACK_IMPORTED_MODULE_17__actions_accounts__","__WEBPACK_IMPORTED_MODULE_18__actions_mutes__","__WEBPACK_IMPORTED_MODULE_19__actions_reports__","__WEBPACK_IMPORTED_MODULE_20__selectors__","__WEBPACK_IMPORTED_MODULE_21_react_router_scroll_4__","__WEBPACK_IMPORTED_MODULE_22__components_column_back_button__","__WEBPACK_IMPORTED_MODULE_23__components_column_header__","__WEBPACK_IMPORTED_MODULE_24__containers_status_container__","__WEBPACK_IMPORTED_MODULE_25__actions_modal__","__WEBPACK_IMPORTED_MODULE_26_react_intl__","__WEBPACK_IMPORTED_MODULE_27_react_immutable_pure_component__","__WEBPACK_IMPORTED_MODULE_27_react_immutable_pure_component___default","__WEBPACK_IMPORTED_MODULE_28_react_hotkeys__","__WEBPACK_IMPORTED_MODULE_29__initial_state__","__WEBPACK_IMPORTED_MODULE_30__features_ui_util_fullscreen__","revealAll","hideAll","params","ancestorsIds","List","descendantsIds","withMutations","mutable","unshift","ids","shift","replies","forEach","fullscreen","handlePin","handleModalReblog","handleOpenMedia","handleToggleHidden","handleToggleAll","_this$props2","statusIds","toJS","_this$props3","handleHotkeyMoveUp","handleMoveUp","handleHotkeyMoveDown","handleMoveDown","handleHotkeyReply","handleHotkeyFavourite","handleHotkeyBoost","handleHotkeyMention","handleHotkeyOpenProfile","handleHotkeyToggleHidden","_this$props4","_selectChild","indexOf","_this$props5","onFullScreenChange","componentWillMount","componentDidMount","_scrolledIntoView","element","querySelectorAll","focus","renderChildren","list","onMoveUp","onMoveDown","componentDidUpdate","scrollIntoView","componentWillUnmount","ancestors","descendants","handlers","moveUp","moveDown","boost","openProfile","toggleHidden","showBackButton","extraButton","aria-pressed","scrollKey","tabIndex","881","__WEBPACK_IMPORTED_MODULE_2_react_intl__","MissingIndicator","tagName","912","Card","__WEBPACK_IMPORTED_MODULE_5_immutable___default","__WEBPACK_IMPORTED_MODULE_6_punycode__","__WEBPACK_IMPORTED_MODULE_6_punycode___default","__WEBPACK_IMPORTED_MODULE_7_classnames__","__WEBPACK_IMPORTED_MODULE_7_classnames___default","decodeIDNA","domain","split","part","decode","slice","join","getHostname","parser","document","hostname","trim","len","cut","substring","domParser","DOMParser","addAutoPlay","html","parseFromString","documentElement","iframe","innerHTML","embedded","handlePhotoClick","fromJS","description","meta","original","handleEmbedClick","renderVideo","content","__html","ratio","dangerouslySetInnerHTML","maxDescription","provider","horizontal","interactive","backgroundImage","iconVariant","913","exports","global","__WEBPACK_AMD_DEFINE_RESULT__","root","RangeError","errors","array","fn","result","mapDomain","string","parts","regexSeparators","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","k","floor","damp","baseMinusTMin","tMax","skew","input","out","basic","j","oldi","w","t","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","delimiter","maxInt","tMin","splice","encode","handledCPCount","basicLength","m","q","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","test","toLowerCase","toASCII","regexNonASCII","freeGlobal","nodeType","punycode","overflow","not-basic","invalid-input","Math","String","fromCharCode","version","ucs2","undefined"],"mappings":"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","file":"features/status.js","sourcesContent":["webpackJsonp([19,33],{\n\n/***/ 1007:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return DetailedStatus; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_prop_types__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react_immutable_proptypes__ = __webpack_require__(14);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react_immutable_proptypes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_react_immutable_proptypes__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__components_avatar__ = __webpack_require__(54);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__components_display_name__ = __webpack_require__(53);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__components_status_content__ = __webpack_require__(104);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__components_media_gallery__ = __webpack_require__(820);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__components_attachment_list__ = __webpack_require__(338);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_react_router_dom__ = __webpack_require__(44);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_react_intl__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__containers_card_container__ = __webpack_require__(1008);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_react_immutable_pure_component__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_react_immutable_pure_component___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15_react_immutable_pure_component__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__video__ = __webpack_require__(74);\n\n\n\n\n\nvar _class, _temp2;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar DetailedStatus = (_temp2 = _class = function (_ImmutablePureCompone) {\n __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default()(DetailedStatus, _ImmutablePureCompone);\n\n function DetailedStatus() {\n var _temp, _this, _ret;\n\n __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default()(this, DetailedStatus);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(this, _ImmutablePureCompone.call.apply(_ImmutablePureCompone, [this].concat(args))), _this), _this.handleAccountClick = function (e) {\n if (e.button === 0) {\n e.preventDefault();\n _this.context.router.history.push('/accounts/' + _this.props.status.getIn(['account', 'id']));\n }\n\n e.stopPropagation();\n }, _this.handleOpenVideo = function (media, startTime) {\n _this.props.onOpenVideo(media, startTime);\n }, _this.handleExpandedToggle = function () {\n _this.props.onToggleHidden(_this.props.status);\n }, _temp), __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(_this, _ret);\n }\n\n DetailedStatus.prototype.render = function render() {\n var status = this.props.status.get('reblog') ? this.props.status.get('reblog') : this.props.status;\n\n var media = '';\n var applicationLink = '';\n var reblogLink = '';\n var reblogIcon = 'retweet';\n\n if (status.get('media_attachments').size > 0) {\n if (status.get('media_attachments').some(function (item) {\n return item.get('type') === 'unknown';\n })) {\n media = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_11__components_attachment_list__[\"a\" /* default */], {\n media: status.get('media_attachments')\n });\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n var video = status.getIn(['media_attachments', 0]);\n\n media = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_16__video__[\"default\"], {\n preview: video.get('preview_url'),\n src: video.get('url'),\n width: 300,\n height: 150,\n inline: true,\n onOpenVideo: this.handleOpenVideo,\n sensitive: status.get('sensitive')\n });\n } else {\n media = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_10__components_media_gallery__[\"default\"], {\n standalone: true,\n sensitive: status.get('sensitive'),\n media: status.get('media_attachments'),\n height: 300,\n onOpenMedia: this.props.onOpenMedia\n });\n }\n } else if (status.get('spoiler_text').length === 0) {\n media = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_14__containers_card_container__[\"a\" /* default */], {\n onOpenMedia: this.props.onOpenMedia,\n statusId: status.get('id')\n });\n }\n\n if (status.get('application')) {\n applicationLink = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('span', {}, void 0, ' \\xB7 ', __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('a', {\n className: 'detailed-status__application',\n href: status.getIn(['application', 'website']),\n target: '_blank',\n rel: 'noopener'\n }, void 0, status.getIn(['application', 'name'])));\n }\n\n if (status.get('visibility') === 'direct') {\n reblogIcon = 'envelope';\n } else if (status.get('visibility') === 'private') {\n reblogIcon = 'lock';\n }\n\n if (status.get('visibility') === 'private') {\n reblogLink = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('i', {\n className: 'fa fa-' + reblogIcon\n });\n } else {\n reblogLink = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_12_react_router_dom__[\"b\" /* Link */], {\n to: '/statuses/' + status.get('id') + '/reblogs',\n className: 'detailed-status__link'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('i', {\n className: 'fa fa-' + reblogIcon\n }), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('span', {\n className: 'detailed-status__reblogs'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_13_react_intl__[\"c\" /* FormattedNumber */], {\n value: status.get('reblogs_count')\n })));\n }\n\n return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'detailed-status'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('a', {\n href: status.getIn(['account', 'url']),\n onClick: this.handleAccountClick,\n className: 'detailed-status__display-name'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'detailed-status__display-avatar'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_7__components_avatar__[\"a\" /* default */], {\n account: status.get('account'),\n size: 48\n })), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_8__components_display_name__[\"a\" /* default */], {\n account: status.get('account')\n })), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_9__components_status_content__[\"a\" /* default */], {\n status: status,\n expanded: !status.get('hidden'),\n onExpandedToggle: this.handleExpandedToggle\n }), media, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'detailed-status__meta'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('a', {\n className: 'detailed-status__datetime',\n href: status.get('url'),\n target: '_blank',\n rel: 'noopener'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_13_react_intl__[\"a\" /* FormattedDate */], {\n value: new Date(status.get('created_at')),\n hour12: false,\n year: 'numeric',\n month: 'short',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n })), applicationLink, ' \\xB7 ', reblogLink, ' \\xB7 ', __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_12_react_router_dom__[\"b\" /* Link */], {\n to: '/statuses/' + status.get('id') + '/favourites',\n className: 'detailed-status__link'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('i', {\n className: 'fa fa-star'\n }), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('span', {\n className: 'detailed-status__favorites'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_13_react_intl__[\"c\" /* FormattedNumber */], {\n value: status.get('favourites_count')\n })))));\n };\n\n return DetailedStatus;\n}(__WEBPACK_IMPORTED_MODULE_15_react_immutable_pure_component___default.a), _class.contextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_5_prop_types___default.a.object\n}, _class.propTypes = {\n status: __WEBPACK_IMPORTED_MODULE_6_react_immutable_proptypes___default.a.map.isRequired,\n onOpenMedia: __WEBPACK_IMPORTED_MODULE_5_prop_types___default.a.func.isRequired,\n onOpenVideo: __WEBPACK_IMPORTED_MODULE_5_prop_types___default.a.func.isRequired,\n onToggleHidden: __WEBPACK_IMPORTED_MODULE_5_prop_types___default.a.func.isRequired\n}, _temp2);\n\n\n/***/ }),\n\n/***/ 1008:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_redux__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_card__ = __webpack_require__(912);\n\n\n\nvar mapStateToProps = function mapStateToProps(state, _ref) {\n var statusId = _ref.statusId;\n return {\n card: state.getIn(['cards', statusId], null)\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Object(__WEBPACK_IMPORTED_MODULE_0_react_redux__[\"connect\"])(mapStateToProps)(__WEBPACK_IMPORTED_MODULE_1__components_card__[\"a\" /* default */]));\n\n/***/ }),\n\n/***/ 1009:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ActionBar; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_prop_types__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__components_icon_button__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__containers_dropdown_menu_container__ = __webpack_require__(300);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_react_intl__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__initial_state__ = __webpack_require__(13);\n\n\n\n\n\nvar _class, _class2, _temp2;\n\n\n\n\n\n\n\n\n\nvar messages = Object(__WEBPACK_IMPORTED_MODULE_8_react_intl__[\"f\" /* defineMessages */])({\n delete: {\n 'id': 'status.delete',\n 'defaultMessage': 'Delete'\n },\n direct: {\n 'id': 'status.direct',\n 'defaultMessage': 'Direct message @{name}'\n },\n mention: {\n 'id': 'status.mention',\n 'defaultMessage': 'Mention @{name}'\n },\n reply: {\n 'id': 'status.reply',\n 'defaultMessage': 'Reply'\n },\n reblog: {\n 'id': 'status.reblog',\n 'defaultMessage': 'Boost'\n },\n reblog_private: {\n 'id': 'status.reblog_private',\n 'defaultMessage': 'Boost to original audience'\n },\n cancel_reblog_private: {\n 'id': 'status.cancel_reblog_private',\n 'defaultMessage': 'Unboost'\n },\n cannot_reblog: {\n 'id': 'status.cannot_reblog',\n 'defaultMessage': 'This post cannot be boosted'\n },\n favourite: {\n 'id': 'status.favourite',\n 'defaultMessage': 'Favourite'\n },\n mute: {\n 'id': 'status.mute',\n 'defaultMessage': 'Mute @{name}'\n },\n muteConversation: {\n 'id': 'status.mute_conversation',\n 'defaultMessage': 'Mute conversation'\n },\n unmuteConversation: {\n 'id': 'status.unmute_conversation',\n 'defaultMessage': 'Unmute conversation'\n },\n block: {\n 'id': 'status.block',\n 'defaultMessage': 'Block @{name}'\n },\n report: {\n 'id': 'status.report',\n 'defaultMessage': 'Report @{name}'\n },\n share: {\n 'id': 'status.share',\n 'defaultMessage': 'Share'\n },\n pin: {\n 'id': 'status.pin',\n 'defaultMessage': 'Pin on profile'\n },\n unpin: {\n 'id': 'status.unpin',\n 'defaultMessage': 'Unpin from profile'\n },\n embed: {\n 'id': 'status.embed',\n 'defaultMessage': 'Embed'\n }\n});\n\nvar ActionBar = Object(__WEBPACK_IMPORTED_MODULE_8_react_intl__[\"g\" /* injectIntl */])(_class = (_temp2 = _class2 = function (_React$PureComponent) {\n __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default()(ActionBar, _React$PureComponent);\n\n function ActionBar() {\n var _temp, _this, _ret;\n\n __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default()(this, ActionBar);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(this, _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args))), _this), _this.handleReplyClick = function () {\n _this.props.onReply(_this.props.status);\n }, _this.handleReblogClick = function (e) {\n _this.props.onReblog(_this.props.status, e);\n }, _this.handleFavouriteClick = function () {\n _this.props.onFavourite(_this.props.status);\n }, _this.handleDeleteClick = function () {\n _this.props.onDelete(_this.props.status);\n }, _this.handleDirectClick = function () {\n _this.props.onDirect(_this.props.status.get('account'), _this.context.router.history);\n }, _this.handleMentionClick = function () {\n _this.props.onMention(_this.props.status.get('account'), _this.context.router.history);\n }, _this.handleMuteClick = function () {\n _this.props.onMute(_this.props.status.get('account'));\n }, _this.handleConversationMuteClick = function () {\n _this.props.onMuteConversation(_this.props.status);\n }, _this.handleBlockClick = function () {\n _this.props.onBlock(_this.props.status.get('account'));\n }, _this.handleReport = function () {\n _this.props.onReport(_this.props.status);\n }, _this.handlePinClick = function () {\n _this.props.onPin(_this.props.status);\n }, _this.handleShare = function () {\n navigator.share({\n text: _this.props.status.get('search_index'),\n url: _this.props.status.get('url')\n });\n }, _this.handleEmbed = function () {\n _this.props.onEmbed(_this.props.status);\n }, _temp), __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(_this, _ret);\n }\n\n ActionBar.prototype.render = function render() {\n var _props = this.props,\n status = _props.status,\n intl = _props.intl;\n\n\n var publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n var mutingConversation = status.get('muted');\n\n var menu = [];\n\n if (publicStatus) {\n //WV not yet in Pleroma\n //menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n menu.push(null);\n }\n\n if (__WEBPACK_IMPORTED_MODULE_9__initial_state__[\"g\" /* me */] === status.getIn(['account', 'id'])) {\n //WV not yet in Pleroma\n //if (publicStatus) {\n // menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n //} else {\n if (status.get('visibility') === 'private') {\n menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog_private : messages.reblog_private), action: this.handleReblogClick });\n }\n //}\n\n menu.push(null);\n //WV not yet in Pleroma\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.delete), action: this.handleDeleteClick });\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 //WV not yet in Pleroma\n //menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick });\n menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick });\n menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });\n }\n\n var shareButton = 'share' in navigator && status.get('visibility') === 'public' && __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'detailed-status__button'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_6__components_icon_button__[\"a\" /* default */], {\n title: intl.formatMessage(messages.share),\n icon: 'share-alt',\n onClick: this.handleShare\n }));\n\n var reblogIcon = 'retweet';\n if (status.get('visibility') === 'direct') reblogIcon = 'envelope';else if (status.get('visibility') === 'private') reblogIcon = 'lock';\n\n var reblog_disabled = status.get('visibility') === 'direct' || status.get('visibility') === 'private';\n\n return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'detailed-status__action-bar'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'detailed-status__button'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_6__components_icon_button__[\"a\" /* default */], {\n title: intl.formatMessage(messages.reply),\n icon: status.get('in_reply_to_id', null) === null ? 'reply' : 'reply-all',\n onClick: this.handleReplyClick\n })), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'detailed-status__button'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_6__components_icon_button__[\"a\" /* default */], {\n disabled: reblog_disabled,\n active: status.get('reblogged'),\n title: reblog_disabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(messages.reblog),\n icon: reblogIcon,\n onClick: this.handleReblogClick\n })), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'detailed-status__button'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_6__components_icon_button__[\"a\" /* default */], {\n className: 'star-icon',\n animate: true,\n active: status.get('favourited'),\n title: intl.formatMessage(messages.favourite),\n icon: 'star',\n onClick: this.handleFavouriteClick\n })), shareButton, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'detailed-status__action-bar-dropdown'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_7__containers_dropdown_menu_container__[\"a\" /* default */], {\n size: 18,\n icon: 'ellipsis-h',\n items: menu,\n direction: 'left',\n title: 'More'\n })));\n };\n\n return ActionBar;\n}(__WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent), _class2.contextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_5_prop_types___default.a.object\n}, _temp2)) || _class;\n\n\n\n/***/ }),\n\n/***/ 153:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ColumnHeader; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_classnames__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_classnames__);\n\n\n\n\n\n\n\n\nvar ColumnHeader = function (_React$PureComponent) {\n __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default()(ColumnHeader, _React$PureComponent);\n\n function ColumnHeader() {\n var _temp, _this, _ret;\n\n __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default()(this, ColumnHeader);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(this, _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args))), _this), _this.handleClick = function () {\n _this.props.onClick();\n }, _temp), __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(_this, _ret);\n }\n\n ColumnHeader.prototype.render = function render() {\n var _props = this.props,\n icon = _props.icon,\n type = _props.type,\n active = _props.active,\n columnHeaderId = _props.columnHeaderId;\n\n var iconElement = '';\n\n if (icon) {\n iconElement = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('i', {\n className: 'fa fa-fw fa-' + icon + ' column-header__icon'\n });\n }\n\n return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('h1', {\n className: __WEBPACK_IMPORTED_MODULE_5_classnames___default()('column-header', { active: active }),\n id: columnHeaderId || null\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('button', {\n onClick: this.handleClick\n }, void 0, iconElement, type));\n };\n\n return ColumnHeader;\n}(__WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent);\n\n\n\n/***/ }),\n\n/***/ 283:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Column; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lodash_debounce__ = __webpack_require__(32);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lodash_debounce___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_debounce__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__column_header__ = __webpack_require__(153);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__scroll__ = __webpack_require__(90);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__is_mobile__ = __webpack_require__(43);\n\n\n\n\n\n\n\n\n\n\n\nvar Column = function (_React$PureComponent) {\n __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default()(Column, _React$PureComponent);\n\n function Column() {\n var _temp, _this, _ret;\n\n __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default()(this, Column);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(this, _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args))), _this), _this.handleHeaderClick = function () {\n var scrollable = _this.node.querySelector('.scrollable');\n\n if (!scrollable) {\n return;\n }\n\n _this._interruptScrollAnimation = Object(__WEBPACK_IMPORTED_MODULE_7__scroll__[\"b\" /* scrollTop */])(scrollable);\n }, _this.handleScroll = __WEBPACK_IMPORTED_MODULE_4_lodash_debounce___default()(function () {\n if (typeof _this._interruptScrollAnimation !== 'undefined') {\n _this._interruptScrollAnimation();\n }\n }, 200), _this.setRef = function (c) {\n _this.node = c;\n }, _temp), __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(_this, _ret);\n }\n\n Column.prototype.scrollTop = function scrollTop() {\n var scrollable = this.node.querySelector('.scrollable');\n\n if (!scrollable) {\n return;\n }\n\n this._interruptScrollAnimation = Object(__WEBPACK_IMPORTED_MODULE_7__scroll__[\"b\" /* scrollTop */])(scrollable);\n };\n\n Column.prototype.render = function render() {\n var _props = this.props,\n heading = _props.heading,\n icon = _props.icon,\n children = _props.children,\n active = _props.active,\n hideHeadingOnMobile = _props.hideHeadingOnMobile;\n\n\n var showHeading = heading && (!hideHeadingOnMobile || hideHeadingOnMobile && !Object(__WEBPACK_IMPORTED_MODULE_8__is_mobile__[\"b\" /* isMobile */])(window.innerWidth));\n\n var columnHeaderId = showHeading && heading.replace(/ /g, '-');\n var header = showHeading && __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_6__column_header__[\"a\" /* default */], {\n icon: icon,\n active: active,\n type: heading,\n onClick: this.handleHeaderClick,\n columnHeaderId: columnHeaderId\n });\n return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(\n 'div',\n {\n ref: this.setRef,\n role: 'region',\n 'aria-labelledby': columnHeaderId,\n className: 'column',\n onScroll: this.handleScroll\n },\n header,\n children\n );\n };\n\n return Column;\n}(__WEBPACK_IMPORTED_MODULE_5_react___default.a.PureComponent);\n\n\n\n/***/ }),\n\n/***/ 285:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ColumnBackButton; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_intl__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_prop_types__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_prop_types__);\n\n\n\n\n\nvar _class, _temp2;\n\n\n\n\n\nvar ColumnBackButton = (_temp2 = _class = function (_React$PureComponent) {\n __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default()(ColumnBackButton, _React$PureComponent);\n\n function ColumnBackButton() {\n var _temp, _this, _ret;\n\n __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default()(this, ColumnBackButton);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(this, _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args))), _this), _this.handleClick = function () {\n if (window.history && window.history.length === 1) {\n _this.context.router.history.push('/');\n } else {\n _this.context.router.history.goBack();\n }\n }, _temp), __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(_this, _ret);\n }\n\n ColumnBackButton.prototype.render = function render() {\n return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('button', {\n onClick: this.handleClick,\n className: 'column-back-button'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('i', {\n className: 'fa fa-fw fa-chevron-left column-back-button__icon'\n }), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_5_react_intl__[\"b\" /* FormattedMessage */], {\n id: 'column_back_button.label',\n defaultMessage: 'Back'\n }));\n };\n\n return ColumnBackButton;\n}(__WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent), _class.contextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object\n}, _temp2);\n\n\n/***/ }),\n\n/***/ 286:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_redux__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__components_status__ = __webpack_require__(156);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__selectors__ = __webpack_require__(68);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__actions_compose__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__actions_interactions__ = __webpack_require__(69);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__actions_accounts__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__actions_statuses__ = __webpack_require__(91);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__actions_mutes__ = __webpack_require__(89);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__actions_reports__ = __webpack_require__(155);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__actions_modal__ = __webpack_require__(26);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_react_intl__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__initial_state__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__actions_alerts__ = __webpack_require__(33);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar messages = Object(__WEBPACK_IMPORTED_MODULE_12_react_intl__[\"f\" /* defineMessages */])({\n deleteConfirm: {\n 'id': 'confirmations.delete.confirm',\n 'defaultMessage': 'Delete'\n },\n deleteMessage: {\n 'id': 'confirmations.delete.message',\n 'defaultMessage': 'Are you sure you want to delete this status?'\n },\n blockConfirm: {\n 'id': 'confirmations.block.confirm',\n 'defaultMessage': 'Block'\n }\n});\n\nvar makeMapStateToProps = function makeMapStateToProps() {\n var getStatus = Object(__WEBPACK_IMPORTED_MODULE_4__selectors__[\"e\" /* makeGetStatus */])();\n\n var mapStateToProps = function mapStateToProps(state, props) {\n return {\n status: getStatus(state, props.id)\n };\n };\n\n return mapStateToProps;\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch, _ref) {\n var intl = _ref.intl;\n return {\n onReply: function onReply(status, router) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_5__actions_compose__[\"T\" /* replyCompose */])(status, router));\n },\n onModalReblog: function onModalReblog(status) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_6__actions_interactions__[\"o\" /* reblog */])(status));\n },\n onReblog: function onReblog(status, e) {\n if (status.get('reblogged')) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_6__actions_interactions__[\"r\" /* unreblog */])(status));\n } else {\n if (e.shiftKey || !__WEBPACK_IMPORTED_MODULE_13__initial_state__[\"b\" /* boostModal */]) {\n this.onModalReblog(status);\n } else {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_11__actions_modal__[\"d\" /* openModal */])('BOOST', { status: status, onReblog: this.onModalReblog }));\n }\n }\n },\n onFavourite: function onFavourite(status) {\n if (status.get('favourited')) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_6__actions_interactions__[\"p\" /* unfavourite */])(status));\n } else {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_6__actions_interactions__[\"k\" /* favourite */])(status));\n }\n },\n onPin: function onPin(status) {\n if (status.get('pinned')) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_6__actions_interactions__[\"q\" /* unpin */])(status));\n } else {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_6__actions_interactions__[\"n\" /* pin */])(status));\n }\n },\n onEmbed: function onEmbed(status) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_11__actions_modal__[\"d\" /* openModal */])('EMBED', {\n url: status.get('url'),\n onError: function onError(error) {\n return dispatch(Object(__WEBPACK_IMPORTED_MODULE_14__actions_alerts__[\"e\" /* showAlertForError */])(error));\n }\n }));\n },\n onDelete: function onDelete(status) {\n if (!__WEBPACK_IMPORTED_MODULE_13__initial_state__[\"e\" /* deleteModal */]) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_8__actions_statuses__[\"f\" /* deleteStatus */])(status.get('id')));\n } else {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_11__actions_modal__[\"d\" /* openModal */])('CONFIRM', {\n message: intl.formatMessage(messages.deleteMessage),\n confirm: intl.formatMessage(messages.deleteConfirm),\n onConfirm: function onConfirm() {\n return dispatch(Object(__WEBPACK_IMPORTED_MODULE_8__actions_statuses__[\"f\" /* deleteStatus */])(status.get('id')));\n }\n }));\n }\n },\n onDirect: function onDirect(account, router) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_5__actions_compose__[\"N\" /* directCompose */])(account, router));\n },\n onMention: function onMention(account, router) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_5__actions_compose__[\"R\" /* mentionCompose */])(account, router));\n },\n onOpenMedia: function onOpenMedia(media, index) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_11__actions_modal__[\"d\" /* openModal */])('MEDIA', { media: media, index: index }));\n },\n onOpenVideo: function onOpenVideo(media, time) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_11__actions_modal__[\"d\" /* openModal */])('VIDEO', { media: media, time: time }));\n },\n onBlock: function onBlock(account) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_11__actions_modal__[\"d\" /* openModal */])('CONFIRM', {\n message: __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_12_react_intl__[\"b\" /* FormattedMessage */], {\n id: 'confirmations.block.message',\n defaultMessage: 'Are you sure you want to block {name}?',\n values: { name: __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('strong', {}, void 0, '@', account.get('acct')) }\n }),\n confirm: intl.formatMessage(messages.blockConfirm),\n onConfirm: function onConfirm() {\n return dispatch(Object(__WEBPACK_IMPORTED_MODULE_7__actions_accounts__[\"q\" /* blockAccount */])(account.get('id')));\n }\n }));\n },\n onReport: function onReport(status) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_reports__[\"k\" /* initReport */])(status.get('account'), status));\n },\n onMute: function onMute(account) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_9__actions_mutes__[\"g\" /* initMuteModal */])(account));\n },\n onMuteConversation: function onMuteConversation(status) {\n if (status.get('muted')) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_8__actions_statuses__[\"k\" /* unmuteStatus */])(status.get('id')));\n } else {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_8__actions_statuses__[\"i\" /* muteStatus */])(status.get('id')));\n }\n },\n onToggleHidden: function onToggleHidden(status) {\n if (status.get('hidden')) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_8__actions_statuses__[\"j\" /* revealStatus */])(status.get('id')));\n } else {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_8__actions_statuses__[\"h\" /* hideStatus */])(status.get('id')));\n }\n }\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Object(__WEBPACK_IMPORTED_MODULE_12_react_intl__[\"g\" /* injectIntl */])(Object(__WEBPACK_IMPORTED_MODULE_2_react_redux__[\"connect\"])(makeMapStateToProps, mapDispatchToProps)(__WEBPACK_IMPORTED_MODULE_3__components_status__[\"a\" /* default */])));\n\n/***/ }),\n\n/***/ 820:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return MediaGallery; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_immutable__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_immutable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_immutable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__icon_button__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_react_intl__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__is_mobile__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_classnames__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_classnames__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__initial_state__ = __webpack_require__(13);\n\n\n\n\n\nvar _class, _temp2, _class2, _class3, _temp4;\n\n\n\n\n\n\n\n\n\n\nvar messages = Object(__WEBPACK_IMPORTED_MODULE_7_react_intl__[\"f\" /* defineMessages */])({\n toggle_visible: {\n 'id': 'media_gallery.toggle_visible',\n 'defaultMessage': 'Toggle visibility'\n }\n});\n\nvar Item = (_temp2 = _class = function (_React$PureComponent) {\n __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default()(Item, _React$PureComponent);\n\n function Item() {\n var _temp, _this, _ret;\n\n __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default()(this, Item);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(this, _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args))), _this), _this.handleMouseEnter = function (e) {\n if (_this.hoverToPlay()) {\n e.target.play();\n }\n }, _this.handleMouseLeave = function (e) {\n if (_this.hoverToPlay()) {\n e.target.pause();\n e.target.currentTime = 0;\n }\n }, _this.handleClick = function (e) {\n var _this$props = _this.props,\n index = _this$props.index,\n onClick = _this$props.onClick;\n\n\n if (e.button === 0) {\n e.preventDefault();\n onClick(index);\n }\n\n e.stopPropagation();\n }, _temp), __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(_this, _ret);\n }\n\n Item.prototype.hoverToPlay = function hoverToPlay() {\n var attachment = this.props.attachment;\n\n return !__WEBPACK_IMPORTED_MODULE_10__initial_state__[\"a\" /* autoPlayGif */] && attachment.get('type') === 'gifv';\n };\n\n Item.prototype.render = function render() {\n var _props = this.props,\n attachment = _props.attachment,\n index = _props.index,\n size = _props.size,\n standalone = _props.standalone,\n displayWidth = _props.displayWidth;\n\n\n var width = 50;\n var height = 100;\n var top = 'auto';\n var left = 'auto';\n var bottom = 'auto';\n var right = 'auto';\n\n if (size === 1) {\n width = 100;\n }\n\n if (size === 4 || size === 3 && index > 0) {\n height = 50;\n }\n\n if (size === 2) {\n if (index === 0) {\n right = '2px';\n } else {\n left = '2px';\n }\n } else if (size === 3) {\n if (index === 0) {\n right = '2px';\n } else if (index > 0) {\n left = '2px';\n }\n\n if (index === 1) {\n bottom = '2px';\n } else if (index > 1) {\n top = '2px';\n }\n } else if (size === 4) {\n if (index === 0 || index === 2) {\n right = '2px';\n }\n\n if (index === 1 || index === 3) {\n left = '2px';\n }\n\n if (index < 2) {\n bottom = '2px';\n } else {\n top = '2px';\n }\n }\n\n var thumbnail = '';\n\n if (attachment.get('type') === 'image') {\n var previewUrl = attachment.get('preview_url');\n var previewWidth = attachment.getIn(['meta', 'small', 'width']);\n\n var originalUrl = attachment.get('url');\n var originalWidth = attachment.getIn(['meta', 'original', 'width']);\n\n var hasSize = typeof originalWidth === 'number' && typeof previewWidth === 'number';\n\n var srcSet = hasSize ? originalUrl + ' ' + originalWidth + 'w, ' + previewUrl + ' ' + previewWidth + 'w' : null;\n var sizes = hasSize ? displayWidth * (width / 100) + 'px' : null;\n\n var focusX = attachment.getIn(['meta', 'focus', 'x']) || 0;\n var focusY = attachment.getIn(['meta', 'focus', 'y']) || 0;\n var x = (focusX / 2 + .5) * 100;\n var y = (focusY / -2 + .5) * 100;\n\n thumbnail = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('a', {\n className: 'media-gallery__item-thumbnail',\n href: attachment.get('remote_url') || originalUrl,\n onClick: this.handleClick,\n target: '_blank'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('img', {\n src: previewUrl,\n srcSet: srcSet,\n sizes: sizes,\n alt: attachment.get('description'),\n title: attachment.get('description'),\n style: { objectPosition: x + '% ' + y + '%' }\n }));\n } else if (attachment.get('type') === 'audio') {\n thumbnail = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'media-gallery__audio'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('audio', {\n className: 'media-gallery__item-audio-thumbnail',\n 'aria-label': attachment.get('description'),\n role: 'application',\n src: attachment.get('url'),\n loop: true,\n controls: true\n }));\n } else if (attachment.get('type') === 'gifv') {\n var autoPlay = !Object(__WEBPACK_IMPORTED_MODULE_8__is_mobile__[\"a\" /* isIOS */])() && __WEBPACK_IMPORTED_MODULE_10__initial_state__[\"a\" /* autoPlayGif */];\n\n thumbnail = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: __WEBPACK_IMPORTED_MODULE_9_classnames___default()('media-gallery__gifv', { autoplay: autoPlay })\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('video', {\n className: 'media-gallery__item-gifv-thumbnail',\n 'aria-label': attachment.get('description'),\n role: 'application',\n src: attachment.get('url'),\n onClick: this.handleClick,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n autoPlay: autoPlay,\n loop: true,\n muted: true\n }), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('span', {\n className: 'media-gallery__gifv__label'\n }, void 0, 'GIF'));\n }\n\n return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: __WEBPACK_IMPORTED_MODULE_9_classnames___default()('media-gallery__item', { standalone: standalone }),\n style: { left: left, top: top, right: right, bottom: bottom, width: width + '%', height: height + '%' }\n }, attachment.get('id'), thumbnail);\n };\n\n return Item;\n}(__WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent), _class.defaultProps = {\n standalone: false,\n index: 0,\n size: 1\n}, _temp2);\n\nvar MediaGallery = Object(__WEBPACK_IMPORTED_MODULE_7_react_intl__[\"g\" /* injectIntl */])(_class2 = (_temp4 = _class3 = function (_React$PureComponent2) {\n __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default()(MediaGallery, _React$PureComponent2);\n\n function MediaGallery() {\n var _temp3, _this2, _ret2;\n\n __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default()(this, MediaGallery);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp3 = (_this2 = __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(this, _React$PureComponent2.call.apply(_React$PureComponent2, [this].concat(args))), _this2), _this2.state = {\n visible: !_this2.props.sensitive || __WEBPACK_IMPORTED_MODULE_10__initial_state__[\"f\" /* displaySensitiveMedia */]\n }, _this2.handleOpen = function () {\n _this2.setState({ visible: !_this2.state.visible });\n }, _this2.handleClick = function (index) {\n _this2.props.onOpenMedia(_this2.props.media, index);\n }, _this2.handleRef = function (node) {\n if (node /*&& this.isStandaloneEligible()*/) {\n // offsetWidth triggers a layout, so only calculate when we need to\n _this2.setState({\n width: node.offsetWidth\n });\n }\n }, _temp3), __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(_this2, _ret2);\n }\n\n MediaGallery.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (!Object(__WEBPACK_IMPORTED_MODULE_5_immutable__[\"is\"])(nextProps.media, this.props.media)) {\n this.setState({ visible: !nextProps.sensitive });\n }\n };\n\n MediaGallery.prototype.isStandaloneEligible = function isStandaloneEligible() {\n var _props2 = this.props,\n media = _props2.media,\n standalone = _props2.standalone;\n\n return standalone && media.size === 1 && media.getIn([0, 'meta', 'small', 'aspect']);\n };\n\n MediaGallery.prototype.render = function render() {\n var _this3 = this;\n\n var _props3 = this.props,\n media = _props3.media,\n intl = _props3.intl,\n sensitive = _props3.sensitive,\n height = _props3.height;\n var _state = this.state,\n width = _state.width,\n visible = _state.visible;\n\n\n var children = void 0;\n\n var style = {};\n\n if (this.isStandaloneEligible()) {\n if (width) {\n style.height = width / this.props.media.getIn([0, 'meta', 'small', 'aspect']);\n }\n } else if (width) {\n style.height = width / (16 / 9);\n } else {\n style.height = height;\n }\n\n if (!visible) {\n var warning = void 0;\n\n if (sensitive) {\n warning = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_7_react_intl__[\"b\" /* FormattedMessage */], {\n id: 'status.sensitive_warning',\n defaultMessage: 'Sensitive content'\n });\n } else {\n warning = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_7_react_intl__[\"b\" /* FormattedMessage */], {\n id: 'status.media_hidden',\n defaultMessage: 'Media hidden'\n });\n }\n\n children = __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(\n 'button',\n { type: 'button', className: 'media-spoiler', onClick: this.handleOpen, style: style, ref: this.handleRef },\n __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('span', {\n className: 'media-spoiler__warning'\n }, void 0, warning),\n __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('span', {\n className: 'media-spoiler__trigger'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_7_react_intl__[\"b\" /* FormattedMessage */], {\n id: 'status.sensitive_toggle',\n defaultMessage: 'Click to view'\n }))\n );\n } else {\n var size = media.take(4).size;\n\n if (this.isStandaloneEligible()) {\n children = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(Item, {\n standalone: true,\n onClick: this.handleClick,\n attachment: media.get(0),\n displayWidth: width\n });\n } else {\n children = media.take(4).map(function (attachment, i) {\n return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(Item, {\n onClick: _this3.handleClick,\n attachment: attachment,\n index: i,\n size: size,\n displayWidth: width\n }, attachment.get('id'));\n });\n }\n }\n\n return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(\n 'div',\n { className: 'media-gallery', style: style, ref: this.handleRef },\n __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: __WEBPACK_IMPORTED_MODULE_9_classnames___default()('spoiler-button', { 'spoiler-button--visible': visible })\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_6__icon_button__[\"a\" /* default */], {\n title: intl.formatMessage(messages.toggle_visible),\n icon: visible ? 'eye' : 'eye-slash',\n overlay: true,\n onClick: this.handleOpen\n })),\n children\n );\n };\n\n return MediaGallery;\n}(__WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent), _class3.defaultProps = {\n standalone: false\n}, _temp4)) || _class2;\n\n\n\n/***/ }),\n\n/***/ 833:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Status; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_immutable__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_immutable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_immutable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react_redux__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_prop_types__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_classnames__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_classnames__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_react_immutable_proptypes__ = __webpack_require__(14);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_react_immutable_proptypes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_react_immutable_proptypes__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__actions_statuses__ = __webpack_require__(91);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__components_missing_indicator__ = __webpack_require__(881);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__components_detailed_status__ = __webpack_require__(1007);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__components_action_bar__ = __webpack_require__(1009);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__ui_components_column__ = __webpack_require__(283);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__actions_interactions__ = __webpack_require__(69);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__actions_compose__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__actions_accounts__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__actions_mutes__ = __webpack_require__(89);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__actions_reports__ = __webpack_require__(155);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__selectors__ = __webpack_require__(68);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21_react_router_scroll_4__ = __webpack_require__(154);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__components_column_back_button__ = __webpack_require__(285);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__components_column_header__ = __webpack_require__(70);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__containers_status_container__ = __webpack_require__(286);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__actions_modal__ = __webpack_require__(26);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26_react_intl__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27_react_immutable_pure_component__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27_react_immutable_pure_component___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_27_react_immutable_pure_component__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28_react_hotkeys__ = __webpack_require__(160);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28_react_hotkeys___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_28_react_hotkeys__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__initial_state__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__features_ui_util_fullscreen__ = __webpack_require__(157);\n\n\n\n\n\nvar _dec, _class, _class2, _temp2;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar messages = Object(__WEBPACK_IMPORTED_MODULE_26_react_intl__[\"f\" /* defineMessages */])({\n deleteConfirm: {\n 'id': 'confirmations.delete.confirm',\n 'defaultMessage': 'Delete'\n },\n deleteMessage: {\n 'id': 'confirmations.delete.message',\n 'defaultMessage': 'Are you sure you want to delete this status?'\n },\n blockConfirm: {\n 'id': 'confirmations.block.confirm',\n 'defaultMessage': 'Block'\n },\n revealAll: {\n 'id': 'status.show_more_all',\n 'defaultMessage': 'Show more for all'\n },\n hideAll: {\n 'id': 'status.show_less_all',\n 'defaultMessage': 'Show less for all'\n }\n});\n\nvar makeMapStateToProps = function makeMapStateToProps() {\n var getStatus = Object(__WEBPACK_IMPORTED_MODULE_20__selectors__[\"e\" /* makeGetStatus */])();\n\n var mapStateToProps = function mapStateToProps(state, props) {\n var status = getStatus(state, props.params.statusId);\n var ancestorsIds = __WEBPACK_IMPORTED_MODULE_4_immutable___default.a.List();\n var descendantsIds = __WEBPACK_IMPORTED_MODULE_4_immutable___default.a.List();\n\n if (status) {\n ancestorsIds = ancestorsIds.withMutations(function (mutable) {\n var id = status.get('in_reply_to_id');\n\n while (id) {\n mutable.unshift(id);\n id = state.getIn(['contexts', 'inReplyTos', id]);\n }\n });\n\n descendantsIds = descendantsIds.withMutations(function (mutable) {\n var ids = [status.get('id')];\n\n while (ids.length > 0) {\n var id = ids.shift();\n var replies = state.getIn(['contexts', 'replies', id]);\n\n if (replies) {\n replies.forEach(function (reply) {\n mutable.push(reply);\n ids.unshift(reply);\n });\n }\n }\n });\n }\n\n return {\n status: status,\n ancestorsIds: ancestorsIds,\n descendantsIds: descendantsIds\n };\n };\n\n return mapStateToProps;\n};\n\nvar Status = (_dec = Object(__WEBPACK_IMPORTED_MODULE_6_react_redux__[\"connect\"])(makeMapStateToProps), Object(__WEBPACK_IMPORTED_MODULE_26_react_intl__[\"g\" /* injectIntl */])(_class = _dec(_class = (_temp2 = _class2 = function (_ImmutablePureCompone) {\n __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default()(Status, _ImmutablePureCompone);\n\n function Status() {\n var _temp, _this, _ret;\n\n __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default()(this, Status);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(this, _ImmutablePureCompone.call.apply(_ImmutablePureCompone, [this].concat(args))), _this), _this.state = {\n fullscreen: false\n }, _this.handleFavouriteClick = function (status) {\n if (status.get('favourited')) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_15__actions_interactions__[\"p\" /* unfavourite */])(status));\n } else {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_15__actions_interactions__[\"k\" /* favourite */])(status));\n }\n }, _this.handlePin = function (status) {\n if (status.get('pinned')) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_15__actions_interactions__[\"q\" /* unpin */])(status));\n } else {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_15__actions_interactions__[\"n\" /* pin */])(status));\n }\n }, _this.handleReplyClick = function (status) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_16__actions_compose__[\"T\" /* replyCompose */])(status, _this.context.router.history));\n }, _this.handleModalReblog = function (status) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_15__actions_interactions__[\"o\" /* reblog */])(status));\n }, _this.handleReblogClick = function (status, e) {\n if (status.get('reblogged')) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_15__actions_interactions__[\"r\" /* unreblog */])(status));\n } else {\n if (e.shiftKey || !__WEBPACK_IMPORTED_MODULE_29__initial_state__[\"b\" /* boostModal */]) {\n _this.handleModalReblog(status);\n } else {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_25__actions_modal__[\"d\" /* openModal */])('BOOST', { status: status, onReblog: _this.handleModalReblog }));\n }\n }\n }, _this.handleDeleteClick = function (status) {\n var _this$props = _this.props,\n dispatch = _this$props.dispatch,\n intl = _this$props.intl;\n\n\n if (!__WEBPACK_IMPORTED_MODULE_29__initial_state__[\"e\" /* deleteModal */]) {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_statuses__[\"f\" /* deleteStatus */])(status.get('id')));\n } else {\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_25__actions_modal__[\"d\" /* openModal */])('CONFIRM', {\n message: intl.formatMessage(messages.deleteMessage),\n confirm: intl.formatMessage(messages.deleteConfirm),\n onConfirm: function onConfirm() {\n return dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_statuses__[\"f\" /* deleteStatus */])(status.get('id')));\n }\n }));\n }\n }, _this.handleDirectClick = function (account, router) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_16__actions_compose__[\"N\" /* directCompose */])(account, router));\n }, _this.handleMentionClick = function (account, router) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_16__actions_compose__[\"R\" /* mentionCompose */])(account, router));\n }, _this.handleOpenMedia = function (media, index) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_25__actions_modal__[\"d\" /* openModal */])('MEDIA', { media: media, index: index }));\n }, _this.handleOpenVideo = function (media, time) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_25__actions_modal__[\"d\" /* openModal */])('VIDEO', { media: media, time: time }));\n }, _this.handleMuteClick = function (account) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_18__actions_mutes__[\"g\" /* initMuteModal */])(account));\n }, _this.handleConversationMuteClick = function (status) {\n if (status.get('muted')) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_statuses__[\"k\" /* unmuteStatus */])(status.get('id')));\n } else {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_statuses__[\"i\" /* muteStatus */])(status.get('id')));\n }\n }, _this.handleToggleHidden = function (status) {\n if (status.get('hidden')) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_statuses__[\"j\" /* revealStatus */])(status.get('id')));\n } else {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_statuses__[\"h\" /* hideStatus */])(status.get('id')));\n }\n }, _this.handleToggleAll = function () {\n var _this$props2 = _this.props,\n status = _this$props2.status,\n ancestorsIds = _this$props2.ancestorsIds,\n descendantsIds = _this$props2.descendantsIds;\n\n var statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n\n if (status.get('hidden')) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_statuses__[\"j\" /* revealStatus */])(statusIds));\n } else {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_statuses__[\"h\" /* hideStatus */])(statusIds));\n }\n }, _this.handleBlockClick = function (account) {\n var _this$props3 = _this.props,\n dispatch = _this$props3.dispatch,\n intl = _this$props3.intl;\n\n\n dispatch(Object(__WEBPACK_IMPORTED_MODULE_25__actions_modal__[\"d\" /* openModal */])('CONFIRM', {\n message: __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_26_react_intl__[\"b\" /* FormattedMessage */], {\n id: 'confirmations.block.message',\n defaultMessage: 'Are you sure you want to block {name}?',\n values: { name: __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('strong', {}, void 0, '@', account.get('acct')) }\n }),\n confirm: intl.formatMessage(messages.blockConfirm),\n onConfirm: function onConfirm() {\n return dispatch(Object(__WEBPACK_IMPORTED_MODULE_17__actions_accounts__[\"q\" /* blockAccount */])(account.get('id')));\n }\n }));\n }, _this.handleReport = function (status) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_19__actions_reports__[\"k\" /* initReport */])(status.get('account'), status));\n }, _this.handleEmbed = function (status) {\n _this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_25__actions_modal__[\"d\" /* openModal */])('EMBED', { url: status.get('url') }));\n }, _this.handleHotkeyMoveUp = function () {\n _this.handleMoveUp(_this.props.status.get('id'));\n }, _this.handleHotkeyMoveDown = function () {\n _this.handleMoveDown(_this.props.status.get('id'));\n }, _this.handleHotkeyReply = function (e) {\n e.preventDefault();\n _this.handleReplyClick(_this.props.status);\n }, _this.handleHotkeyFavourite = function () {\n _this.handleFavouriteClick(_this.props.status);\n }, _this.handleHotkeyBoost = function () {\n _this.handleReblogClick(_this.props.status);\n }, _this.handleHotkeyMention = function (e) {\n e.preventDefault();\n _this.handleMentionClick(_this.props.status);\n }, _this.handleHotkeyOpenProfile = function () {\n _this.context.router.history.push('/accounts/' + _this.props.status.getIn(['account', 'id']));\n }, _this.handleHotkeyToggleHidden = function () {\n _this.handleToggleHidden(_this.props.status);\n }, _this.handleMoveUp = function (id) {\n var _this$props4 = _this.props,\n status = _this$props4.status,\n ancestorsIds = _this$props4.ancestorsIds,\n descendantsIds = _this$props4.descendantsIds;\n\n\n if (id === status.get('id')) {\n _this._selectChild(ancestorsIds.size - 1);\n } else {\n var index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n _this._selectChild(ancestorsIds.size + index);\n } else {\n _this._selectChild(index - 1);\n }\n }\n }, _this.handleMoveDown = function (id) {\n var _this$props5 = _this.props,\n status = _this$props5.status,\n ancestorsIds = _this$props5.ancestorsIds,\n descendantsIds = _this$props5.descendantsIds;\n\n\n if (id === status.get('id')) {\n _this._selectChild(ancestorsIds.size + 1);\n } else {\n var index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n _this._selectChild(ancestorsIds.size + index + 2);\n } else {\n _this._selectChild(index + 1);\n }\n }\n }, _this.setRef = function (c) {\n _this.node = c;\n }, _this.onFullScreenChange = function () {\n _this.setState({ fullscreen: Object(__WEBPACK_IMPORTED_MODULE_30__features_ui_util_fullscreen__[\"d\" /* isFullscreen */])() });\n }, _temp), __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(_this, _ret);\n }\n\n Status.prototype.componentWillMount = function componentWillMount() {\n this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_statuses__[\"g\" /* fetchStatus */])(this.props.params.statusId));\n };\n\n Status.prototype.componentDidMount = function componentDidMount() {\n Object(__WEBPACK_IMPORTED_MODULE_30__features_ui_util_fullscreen__[\"a\" /* attachFullscreenListener */])(this.onFullScreenChange);\n };\n\n Status.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this._scrolledIntoView = false;\n this.props.dispatch(Object(__WEBPACK_IMPORTED_MODULE_10__actions_statuses__[\"g\" /* fetchStatus */])(nextProps.params.statusId));\n }\n };\n\n Status.prototype._selectChild = function _selectChild(index) {\n var element = this.node.querySelectorAll('.focusable')[index];\n\n if (element) {\n element.focus();\n }\n };\n\n Status.prototype.renderChildren = function renderChildren(list) {\n var _this2 = this;\n\n return list.map(function (id) {\n return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_24__containers_status_container__[\"a\" /* default */], {\n id: id,\n onMoveUp: _this2.handleMoveUp,\n onMoveDown: _this2.handleMoveDown\n }, id);\n });\n };\n\n Status.prototype.componentDidUpdate = function componentDidUpdate() {\n if (this._scrolledIntoView) {\n return;\n }\n\n var _props = this.props,\n status = _props.status,\n ancestorsIds = _props.ancestorsIds;\n\n\n if (status && ancestorsIds && ancestorsIds.size > 0) {\n var element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];\n\n element.scrollIntoView(true);\n this._scrolledIntoView = true;\n }\n };\n\n Status.prototype.componentWillUnmount = function componentWillUnmount() {\n Object(__WEBPACK_IMPORTED_MODULE_30__features_ui_util_fullscreen__[\"b\" /* detachFullscreenListener */])(this.onFullScreenChange);\n };\n\n Status.prototype.render = function render() {\n var ancestors = void 0,\n descendants = void 0;\n var _props2 = this.props,\n status = _props2.status,\n ancestorsIds = _props2.ancestorsIds,\n descendantsIds = _props2.descendantsIds,\n intl = _props2.intl;\n var fullscreen = this.state.fullscreen;\n\n\n if (status === null) {\n return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_14__ui_components_column__[\"a\" /* default */], {}, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_22__components_column_back_button__[\"a\" /* default */], {}), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_11__components_missing_indicator__[\"a\" /* default */], {}));\n }\n\n if (ancestorsIds && ancestorsIds.size > 0) {\n ancestors = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {}, void 0, this.renderChildren(ancestorsIds));\n }\n\n if (descendantsIds && descendantsIds.size > 0) {\n descendants = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {}, void 0, this.renderChildren(descendantsIds));\n }\n\n var handlers = {\n moveUp: this.handleHotkeyMoveUp,\n moveDown: this.handleHotkeyMoveDown,\n reply: this.handleHotkeyReply,\n favourite: this.handleHotkeyFavourite,\n boost: this.handleHotkeyBoost,\n mention: this.handleHotkeyMention,\n openProfile: this.handleHotkeyOpenProfile,\n toggleHidden: this.handleHotkeyToggleHidden\n };\n\n return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_14__ui_components_column__[\"a\" /* default */], {}, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_23__components_column_header__[\"a\" /* default */], {\n showBackButton: true,\n extraButton: __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('button', {\n className: 'column-header__button',\n title: intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll),\n 'aria-label': intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll),\n onClick: this.handleToggleAll,\n 'aria-pressed': status.get('hidden') ? 'false' : 'true'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('i', {\n className: 'fa fa-' + (status.get('hidden') ? 'eye-slash' : 'eye')\n }))\n }), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_21_react_router_scroll_4__[\"a\" /* ScrollContainer */], {\n scrollKey: 'thread'\n }, void 0, __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(\n 'div',\n { className: __WEBPACK_IMPORTED_MODULE_8_classnames___default()('scrollable', 'detailed-status__wrapper', { fullscreen: fullscreen }), ref: this.setRef },\n ancestors,\n __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_28_react_hotkeys__[\"HotKeys\"], {\n handlers: handlers\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'focusable',\n tabIndex: '0'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_12__components_detailed_status__[\"a\" /* default */], {\n status: status,\n onOpenVideo: this.handleOpenVideo,\n onOpenMedia: this.handleOpenMedia,\n onToggleHidden: this.handleToggleHidden\n }), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_13__components_action_bar__[\"a\" /* default */], {\n status: status,\n onReply: this.handleReplyClick,\n onFavourite: this.handleFavouriteClick,\n onReblog: this.handleReblogClick,\n onDelete: this.handleDeleteClick,\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 descendants\n )));\n };\n\n return Status;\n}(__WEBPACK_IMPORTED_MODULE_27_react_immutable_pure_component___default.a), _class2.contextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_7_prop_types___default.a.object\n}, _class2.propTypes = {\n params: __WEBPACK_IMPORTED_MODULE_7_prop_types___default.a.object.isRequired,\n dispatch: __WEBPACK_IMPORTED_MODULE_7_prop_types___default.a.func.isRequired,\n status: __WEBPACK_IMPORTED_MODULE_9_react_immutable_proptypes___default.a.map,\n ancestorsIds: __WEBPACK_IMPORTED_MODULE_9_react_immutable_proptypes___default.a.list,\n descendantsIds: __WEBPACK_IMPORTED_MODULE_9_react_immutable_proptypes___default.a.list,\n intl: __WEBPACK_IMPORTED_MODULE_7_prop_types___default.a.object.isRequired\n}, _temp2)) || _class) || _class);\n\n\n/***/ }),\n\n/***/ 881:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_intl__ = __webpack_require__(7);\n\n\n\n\nvar MissingIndicator = function MissingIndicator() {\n return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'regeneration-indicator missing-indicator'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {}, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'regeneration-indicator__figure'\n }), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'regeneration-indicator__label'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_2_react_intl__[\"b\" /* FormattedMessage */], {\n id: 'missing_indicator.label',\n tagName: 'strong',\n defaultMessage: 'Not found'\n }), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()(__WEBPACK_IMPORTED_MODULE_2_react_intl__[\"b\" /* FormattedMessage */], {\n id: 'missing_indicator.sublabel',\n defaultMessage: 'This resource could not be found'\n }))));\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (MissingIndicator);\n\n/***/ }),\n\n/***/ 912:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Card; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_immutable__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_immutable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_immutable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_punycode__ = __webpack_require__(913);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_punycode___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_punycode__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_classnames__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_classnames__);\n\n\n\n\n\nvar _class, _temp2;\n\n\n\n\n\n\n\n\nvar IDNA_PREFIX = 'xn--';\n\nvar decodeIDNA = function decodeIDNA(domain) {\n return domain.split('.').map(function (part) {\n return part.indexOf(IDNA_PREFIX) === 0 ? __WEBPACK_IMPORTED_MODULE_6_punycode___default.a.decode(part.slice(IDNA_PREFIX.length)) : part;\n }).join('.');\n};\n\nvar getHostname = function getHostname(url) {\n var parser = document.createElement('a');\n parser.href = url;\n return parser.hostname;\n};\n\nvar trim = function trim(text, len) {\n var cut = text.indexOf(' ', len);\n\n if (cut === -1) {\n return text;\n }\n\n return text.substring(0, cut) + (text.length > len ? '…' : '');\n};\n\nvar domParser = new DOMParser();\n\nvar addAutoPlay = function addAutoPlay(html) {\n var document = domParser.parseFromString(html, 'text/html').documentElement;\n var iframe = document.querySelector('iframe');\n\n if (iframe) {\n if (iframe.src.indexOf('?') !== -1) {\n iframe.src += '&';\n } else {\n iframe.src += '?';\n }\n\n iframe.src += 'autoplay=1&auto_play=1';\n\n // DOM parser creates html/body elements around original HTML fragment,\n // so we need to get innerHTML out of the body and not the entire document\n return document.querySelector('body').innerHTML;\n }\n\n return html;\n};\n\nvar Card = (_temp2 = _class = function (_React$PureComponent) {\n __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default()(Card, _React$PureComponent);\n\n function Card() {\n var _temp, _this, _ret;\n\n __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default()(this, Card);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(this, _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args))), _this), _this.state = {\n width: 280,\n embedded: false\n }, _this.handlePhotoClick = function () {\n var _this$props = _this.props,\n card = _this$props.card,\n onOpenMedia = _this$props.onOpenMedia;\n\n\n onOpenMedia(__WEBPACK_IMPORTED_MODULE_5_immutable___default.a.fromJS([{\n type: 'image',\n url: card.get('embed_url'),\n description: card.get('title'),\n meta: {\n original: {\n width: card.get('width'),\n height: card.get('height')\n }\n }\n }]), 0);\n }, _this.handleEmbedClick = function () {\n var card = _this.props.card;\n\n\n if (card.get('type') === 'photo') {\n _this.handlePhotoClick();\n } else {\n _this.setState({ embedded: true });\n }\n }, _this.setRef = function (c) {\n if (c) {\n _this.setState({ width: c.offsetWidth });\n }\n }, _temp), __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(_this, _ret);\n }\n\n Card.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.card !== nextProps.card) {\n this.setState({ embedded: false });\n }\n };\n\n Card.prototype.renderVideo = function renderVideo() {\n var card = this.props.card;\n\n var content = { __html: addAutoPlay(card.get('html')) };\n var width = this.state.width;\n\n var ratio = card.get('width') / card.get('height');\n var height = card.get('width') > card.get('height') ? width / ratio : width * ratio;\n\n return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement('div', {\n ref: this.setRef,\n className: 'status-card__image status-card-video',\n dangerouslySetInnerHTML: content,\n style: { height: height }\n });\n };\n\n Card.prototype.render = function render() {\n var _props = this.props,\n card = _props.card,\n maxDescription = _props.maxDescription;\n var _state = this.state,\n width = _state.width,\n embedded = _state.embedded;\n\n\n if (card === null) {\n return null;\n }\n\n var provider = card.get('provider_name').length === 0 ? decodeIDNA(getHostname(card.get('url'))) : card.get('provider_name');\n var horizontal = card.get('width') > card.get('height') && card.get('width') + 100 >= width || card.get('type') !== 'link';\n var className = __WEBPACK_IMPORTED_MODULE_7_classnames___default()('status-card', { horizontal: horizontal });\n var interactive = card.get('type') !== 'link';\n var title = interactive ? __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('a', {\n className: 'status-card__title',\n href: card.get('url'),\n title: card.get('title'),\n rel: 'noopener',\n target: '_blank'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('strong', {}, void 0, card.get('title'))) : __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('strong', {\n className: 'status-card__title',\n title: card.get('title')\n }, void 0, card.get('title'));\n var ratio = card.get('width') / card.get('height');\n var height = card.get('width') > card.get('height') ? width / ratio : width * ratio;\n\n var description = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'status-card__content'\n }, void 0, title, !horizontal && __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('p', {\n className: 'status-card__description'\n }, void 0, trim(card.get('description') || '', maxDescription)), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('span', {\n className: 'status-card__host'\n }, void 0, provider));\n\n var embed = '';\n var thumbnail = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n style: { backgroundImage: 'url(' + card.get('image') + ')', width: horizontal ? width : null, height: horizontal ? height : null },\n className: 'status-card__image-image'\n });\n\n if (interactive) {\n if (embedded) {\n embed = this.renderVideo();\n } else {\n var iconVariant = 'play';\n\n if (card.get('type') === 'photo') {\n iconVariant = 'search-plus';\n }\n\n embed = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'status-card__image'\n }, void 0, thumbnail, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'status-card__actions'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {}, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('button', {\n onClick: this.handleEmbedClick\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('i', {\n className: 'fa fa-' + iconVariant\n })), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('a', {\n href: card.get('url'),\n target: '_blank',\n rel: 'noopener'\n }, void 0, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('i', {\n className: 'fa fa-external-link'\n })))));\n }\n\n return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(\n 'div',\n { className: className, ref: this.setRef },\n embed,\n description\n );\n } else if (card.get('image')) {\n embed = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_jsx___default()('div', {\n className: 'status-card__image'\n }, void 0, thumbnail);\n }\n\n return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(\n 'a',\n { href: card.get('url'), className: className, target: '_blank', rel: 'noopener', ref: this.setRef },\n embed,\n description\n );\n };\n\n return Card;\n}(__WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent), _class.defaultProps = {\n maxDescription: 50\n}, _temp2);\n\n\n/***/ }),\n\n/***/ 913:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function (root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module && !module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n * The `punycode` object.\n * @name punycode\n * @type Object\n */\n\tvar punycode,\n\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647,\n\t // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\t tMin = 1,\n\t tMax = 26,\n\t skew = 38,\n\t damp = 700,\n\t initialBias = 72,\n\t initialN = 128,\n\t // 0x80\n\tdelimiter = '-',\n\t // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\t regexNonASCII = /[^\\x20-\\x7E]/,\n\t // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g,\n\t // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\t floor = Math.floor,\n\t stringFromCharCode = String.fromCharCode,\n\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t\t// low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function (value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\n\t\t/** Cached calculation results */\n\t\tbaseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base;; /* no condition */k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\n\t\t/** `inputLength` will hold the number of code points in `input`. */\n\t\tinputLength,\n\n\t\t/** Cached calculation results */\n\t\thandledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base;; /* no condition */k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function (string) {\n\t\t\treturn regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n\t\t});\n\t}\n\n\t/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function (string) {\n\t\t\treturn regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n * A string representing the current Punycode.js version number.\n * @memberOf punycode\n * @type String\n */\n\t\t'version': '1.4.1',\n\t\t/**\n * An object of methods to convert from JavaScript's internal character\n * representation (UCS-2) to Unicode code points, and back.\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode\n * @type Object\n */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (true) {\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn punycode;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n})(this);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(101)(module), __webpack_require__(57)))\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// features/status.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport StatusContent from '../../../components/status_content';\nimport MediaGallery from '../../../components/media_gallery';\nimport AttachmentList from '../../../components/attachment_list';\nimport { Link } from 'react-router-dom';\nimport { FormattedDate, FormattedNumber } from 'react-intl';\nimport CardContainer from '../containers/card_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Video from '../../video';\n\nexport default class DetailedStatus extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map.isRequired,\n onOpenMedia: PropTypes.func.isRequired,\n onOpenVideo: PropTypes.func.isRequired,\n onToggleHidden: PropTypes.func.isRequired,\n };\n\n handleAccountClick = (e) => {\n if (e.button === 0) {\n e.preventDefault();\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n }\n\n e.stopPropagation();\n }\n\n handleOpenVideo = (media, startTime) => {\n this.props.onOpenVideo(media, startTime);\n }\n\n handleExpandedToggle = () => {\n this.props.onToggleHidden(this.props.status);\n }\n\n render () {\n const status = this.props.status.get('reblog') ? this.props.status.get('reblog') : this.props.status;\n\n let media = '';\n let applicationLink = '';\n let reblogLink = '';\n let reblogIcon = 'retweet';\n\n if (status.get('media_attachments').size > 0) {\n if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) {\n media = <AttachmentList media={status.get('media_attachments')} />;\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const video = status.getIn(['media_attachments', 0]);\n\n media = (\n <Video\n preview={video.get('preview_url')}\n src={video.get('url')}\n width={300}\n height={150}\n inline\n onOpenVideo={this.handleOpenVideo}\n sensitive={status.get('sensitive')}\n />\n );\n } else {\n media = (\n <MediaGallery\n standalone\n sensitive={status.get('sensitive')}\n media={status.get('media_attachments')}\n height={300}\n onOpenMedia={this.props.onOpenMedia}\n />\n );\n }\n } else if (status.get('spoiler_text').length === 0) {\n media = <CardContainer onOpenMedia={this.props.onOpenMedia} statusId={status.get('id')} />;\n }\n\n if (status.get('application')) {\n applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener'>{status.getIn(['application', 'name'])}</a></span>;\n }\n\n if (status.get('visibility') === 'direct') {\n reblogIcon = 'envelope';\n } else if (status.get('visibility') === 'private') {\n reblogIcon = 'lock';\n }\n\n if (status.get('visibility') === 'private') {\n reblogLink = <i className={`fa fa-${reblogIcon}`} />;\n } else {\n reblogLink = (<Link to={`/statuses/${status.get('id')}/reblogs`} className='detailed-status__link'>\n <i className={`fa fa-${reblogIcon}`} />\n <span className='detailed-status__reblogs'>\n <FormattedNumber value={status.get('reblogs_count')} />\n </span>\n </Link>);\n }\n\n return (\n <div className='detailed-status'>\n <a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='detailed-status__display-name'>\n <div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={48} /></div>\n <DisplayName account={status.get('account')} />\n </a>\n\n <StatusContent status={status} expanded={!status.get('hidden')} onExpandedToggle={this.handleExpandedToggle} />\n\n {media}\n\n <div className='detailed-status__meta'>\n <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener'>\n <FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />\n </a>{applicationLink} · {reblogLink} · <Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'>\n <i className='fa fa-star' />\n <span className='detailed-status__favorites'>\n <FormattedNumber value={status.get('favourites_count')} />\n </span>\n </Link>\n </div>\n </div>\n );\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/status/components/detailed_status.js","import { connect } from 'react-redux';\nimport Card from '../components/card';\n\nconst mapStateToProps = (state, { statusId }) => ({\n card: state.getIn(['cards', statusId], null),\n});\n\nexport default connect(mapStateToProps)(Card);\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/status/containers/card_container.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from '../../../components/icon_button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport DropdownMenuContainer from '../../../containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { me } from '../../../initial_state';\n\nconst messages = defineMessages({\n delete: { id: 'status.delete', defaultMessage: 'Delete' },\n direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },\n mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n reply: { id: 'status.reply', defaultMessage: 'Reply' },\n reblog: { id: 'status.reblog', defaultMessage: 'Boost' },\n reblog_private: { id: 'status.reblog_private', defaultMessage: 'Boost to original audience' },\n cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' },\n cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },\n favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n mute: { id: 'status.mute', defaultMessage: 'Mute @{name}' },\n muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n block: { id: 'status.block', defaultMessage: 'Block @{name}' },\n report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n share: { id: 'status.share', defaultMessage: 'Share' },\n pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },\n unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' },\n embed: { id: 'status.embed', defaultMessage: 'Embed' },\n});\n\n@injectIntl\nexport default class ActionBar extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map.isRequired,\n onReply: PropTypes.func.isRequired,\n onReblog: PropTypes.func.isRequired,\n onFavourite: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onDirect: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n onMute: PropTypes.func,\n onMuteConversation: PropTypes.func,\n onBlock: PropTypes.func,\n onReport: PropTypes.func,\n onPin: PropTypes.func,\n onEmbed: PropTypes.func,\n intl: PropTypes.object.isRequired,\n };\n\n handleReplyClick = () => {\n this.props.onReply(this.props.status);\n }\n\n handleReblogClick = (e) => {\n this.props.onReblog(this.props.status, e);\n }\n\n handleFavouriteClick = () => {\n this.props.onFavourite(this.props.status);\n }\n\n handleDeleteClick = () => {\n this.props.onDelete(this.props.status);\n }\n\n handleDirectClick = () => {\n this.props.onDirect(this.props.status.get('account'), this.context.router.history);\n }\n\n handleMentionClick = () => {\n this.props.onMention(this.props.status.get('account'), this.context.router.history);\n }\n\n handleMuteClick = () => {\n this.props.onMute(this.props.status.get('account'));\n }\n\n handleConversationMuteClick = () => {\n this.props.onMuteConversation(this.props.status);\n }\n\n handleBlockClick = () => {\n this.props.onBlock(this.props.status.get('account'));\n }\n\n handleReport = () => {\n this.props.onReport(this.props.status);\n }\n\n handlePinClick = () => {\n this.props.onPin(this.props.status);\n }\n\n handleShare = () => {\n navigator.share({\n text: this.props.status.get('search_index'),\n url: this.props.status.get('url'),\n });\n }\n\n handleEmbed = () => {\n this.props.onEmbed(this.props.status);\n }\n\n render () {\n const { status, intl } = this.props;\n\n const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n const mutingConversation = status.get('muted');\n\n let menu = [];\n\n if (publicStatus) {\n //WV not yet in Pleroma\n //menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n menu.push(null);\n }\n\n if (me === status.getIn(['account', 'id'])) {\n //WV not yet in Pleroma\n //if (publicStatus) {\n // menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n //} else {\n if (status.get('visibility') === 'private') {\n menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog_private : messages.reblog_private), action: this.handleReblogClick });\n }\n //}\n\n menu.push(null);\n //WV not yet in Pleroma\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.delete), action: this.handleDeleteClick });\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 //WV not yet in Pleroma\n //menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick });\n menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick });\n menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });\n }\n\n const shareButton = ('share' in navigator) && status.get('visibility') === 'public' && (\n <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.share)} icon='share-alt' onClick={this.handleShare} /></div>\n );\n\n let reblogIcon = 'retweet';\n if (status.get('visibility') === 'direct') reblogIcon = 'envelope';\n else if (status.get('visibility') === 'private') reblogIcon = 'lock';\n\n let reblog_disabled = (status.get('visibility') === 'direct' || status.get('visibility') === 'private');\n\n return (\n <div className='detailed-status__action-bar'>\n <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.reply)} icon={status.get('in_reply_to_id', null) === null ? 'reply' : 'reply-all'} onClick={this.handleReplyClick} /></div>\n <div className='detailed-status__button'><IconButton disabled={reblog_disabled} active={status.get('reblogged')} title={reblog_disabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(messages.reblog)} icon={reblogIcon} 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' onClick={this.handleFavouriteClick} /></div>\n {shareButton}\n\n <div className='detailed-status__action-bar-dropdown'>\n <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' title='More' />\n </div>\n </div>\n );\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/status/components/action_bar.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nexport default class ColumnHeader extends React.PureComponent {\n\n static propTypes = {\n icon: PropTypes.string,\n type: PropTypes.string,\n active: PropTypes.bool,\n onClick: PropTypes.func,\n columnHeaderId: PropTypes.string,\n };\n\n handleClick = () => {\n this.props.onClick();\n }\n\n render () {\n const { icon, type, active, columnHeaderId } = this.props;\n let iconElement = '';\n\n if (icon) {\n iconElement = <i className={`fa fa-fw fa-${icon} column-header__icon`} />;\n }\n\n return (\n <h1 className={classNames('column-header', { active })} id={columnHeaderId || null}>\n <button onClick={this.handleClick}>\n {iconElement}\n {type}\n </button>\n </h1>\n );\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/components/column_header.js","import React from 'react';\nimport ColumnHeader from './column_header';\nimport PropTypes from 'prop-types';\nimport { debounce } from 'lodash';\nimport { scrollTop } from '../../../scroll';\nimport { isMobile } from '../../../is_mobile';\n\nexport default class Column extends React.PureComponent {\n\n static propTypes = {\n heading: PropTypes.string,\n icon: PropTypes.string,\n children: PropTypes.node,\n active: PropTypes.bool,\n hideHeadingOnMobile: PropTypes.bool,\n };\n\n handleHeaderClick = () => {\n const scrollable = this.node.querySelector('.scrollable');\n\n if (!scrollable) {\n return;\n }\n\n this._interruptScrollAnimation = scrollTop(scrollable);\n }\n\n scrollTop () {\n const scrollable = this.node.querySelector('.scrollable');\n\n if (!scrollable) {\n return;\n }\n\n this._interruptScrollAnimation = scrollTop(scrollable);\n }\n\n\n handleScroll = debounce(() => {\n if (typeof this._interruptScrollAnimation !== 'undefined') {\n this._interruptScrollAnimation();\n }\n }, 200)\n\n setRef = (c) => {\n this.node = c;\n }\n\n render () {\n const { heading, icon, children, active, hideHeadingOnMobile } = this.props;\n\n const showHeading = heading && (!hideHeadingOnMobile || (hideHeadingOnMobile && !isMobile(window.innerWidth)));\n\n const columnHeaderId = showHeading && heading.replace(/ /g, '-');\n const header = showHeading && (\n <ColumnHeader icon={icon} active={active} type={heading} onClick={this.handleHeaderClick} columnHeaderId={columnHeaderId} />\n );\n return (\n <div\n ref={this.setRef}\n role='region'\n aria-labelledby={columnHeaderId}\n className='column'\n onScroll={this.handleScroll}\n >\n {header}\n {children}\n </div>\n );\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/components/column.js","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\n\nexport default class ColumnBackButton extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n handleClick = () => {\n if (window.history && window.history.length === 1) {\n this.context.router.history.push('/');\n } else {\n this.context.router.history.goBack();\n }\n }\n\n render () {\n return (\n <button onClick={this.handleClick} className='column-back-button'>\n <i className='fa fa-fw fa-chevron-left column-back-button__icon' />\n <FormattedMessage id='column_back_button.label' defaultMessage='Back' />\n </button>\n );\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/components/column_back_button.js","import React from 'react';\nimport { connect } from 'react-redux';\nimport Status from '../components/status';\nimport { makeGetStatus } from '../selectors';\nimport {\n replyCompose,\n mentionCompose,\n directCompose,\n} from '../actions/compose';\nimport {\n reblog,\n favourite,\n unreblog,\n unfavourite,\n pin,\n unpin,\n} from '../actions/interactions';\nimport { blockAccount } from '../actions/accounts';\nimport {\n muteStatus,\n unmuteStatus,\n deleteStatus,\n hideStatus,\n revealStatus,\n} from '../actions/statuses';\nimport { initMuteModal } from '../actions/mutes';\nimport { initReport } from '../actions/reports';\nimport { openModal } from '../actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { boostModal, deleteModal } from '../initial_state';\nimport { showAlertForError } from '../actions/alerts';\n\nconst messages = defineMessages({\n deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },\n deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },\n blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },\n});\n\nconst makeMapStateToProps = () => {\n const getStatus = makeGetStatus();\n\n const mapStateToProps = (state, props) => ({\n status: getStatus(state, props.id),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n onReply (status, router) {\n dispatch(replyCompose(status, router));\n },\n\n onModalReblog (status) {\n dispatch(reblog(status));\n },\n\n onReblog (status, e) {\n if (status.get('reblogged')) {\n dispatch(unreblog(status));\n } else {\n if (e.shiftKey || !boostModal) {\n this.onModalReblog(status);\n } else {\n dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));\n }\n }\n },\n\n onFavourite (status) {\n if (status.get('favourited')) {\n dispatch(unfavourite(status));\n } else {\n dispatch(favourite(status));\n }\n },\n\n onPin (status) {\n if (status.get('pinned')) {\n dispatch(unpin(status));\n } else {\n dispatch(pin(status));\n }\n },\n\n onEmbed (status) {\n dispatch(openModal('EMBED', {\n url: status.get('url'),\n onError: error => dispatch(showAlertForError(error)),\n }));\n },\n\n onDelete (status) {\n if (!deleteModal) {\n dispatch(deleteStatus(status.get('id')));\n } else {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.deleteMessage),\n confirm: intl.formatMessage(messages.deleteConfirm),\n onConfirm: () => dispatch(deleteStatus(status.get('id'))),\n }));\n }\n },\n\n onDirect (account, router) {\n dispatch(directCompose(account, router));\n },\n\n onMention (account, router) {\n dispatch(mentionCompose(account, router));\n },\n\n onOpenMedia (media, index) {\n dispatch(openModal('MEDIA', { media, index }));\n },\n\n onOpenVideo (media, time) {\n dispatch(openModal('VIDEO', { media, time }));\n },\n\n onBlock (account) {\n dispatch(openModal('CONFIRM', {\n message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,\n confirm: intl.formatMessage(messages.blockConfirm),\n onConfirm: () => dispatch(blockAccount(account.get('id'))),\n }));\n },\n\n onReport (status) {\n dispatch(initReport(status.get('account'), status));\n },\n\n onMute (account) {\n dispatch(initMuteModal(account));\n },\n\n onMuteConversation (status) {\n if (status.get('muted')) {\n dispatch(unmuteStatus(status.get('id')));\n } else {\n dispatch(muteStatus(status.get('id')));\n }\n },\n\n onToggleHidden (status) {\n if (status.get('hidden')) {\n dispatch(revealStatus(status.get('id')));\n } else {\n dispatch(hideStatus(status.get('id')));\n }\n },\n\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Status));\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/containers/status_container.js","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { is } from 'immutable';\nimport IconButton from './icon_button';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { isIOS } from '../is_mobile';\nimport classNames from 'classnames';\nimport { autoPlayGif, displaySensitiveMedia } from '../initial_state';\n\nconst messages = defineMessages({\n toggle_visible: { id: 'media_gallery.toggle_visible', defaultMessage: 'Toggle visibility' },\n});\n\nclass Item extends React.PureComponent {\n\n static propTypes = {\n attachment: ImmutablePropTypes.map.isRequired,\n standalone: PropTypes.bool,\n index: PropTypes.number.isRequired,\n size: PropTypes.number.isRequired,\n onClick: PropTypes.func.isRequired,\n displayWidth: PropTypes.number,\n };\n\n static defaultProps = {\n standalone: false,\n index: 0,\n size: 1,\n };\n\n handleMouseEnter = (e) => {\n if (this.hoverToPlay()) {\n e.target.play();\n }\n }\n\n handleMouseLeave = (e) => {\n if (this.hoverToPlay()) {\n e.target.pause();\n e.target.currentTime = 0;\n }\n }\n\n hoverToPlay () {\n const { attachment } = this.props;\n return !autoPlayGif && attachment.get('type') === 'gifv';\n }\n\n handleClick = (e) => {\n const { index, onClick } = this.props;\n\n if (e.button === 0) {\n e.preventDefault();\n onClick(index);\n }\n\n e.stopPropagation();\n }\n\n render () {\n const { attachment, index, size, standalone, displayWidth } = this.props;\n\n let width = 50;\n let height = 100;\n let top = 'auto';\n let left = 'auto';\n let bottom = 'auto';\n let right = 'auto';\n\n if (size === 1) {\n width = 100;\n }\n\n if (size === 4 || (size === 3 && index > 0)) {\n height = 50;\n }\n\n if (size === 2) {\n if (index === 0) {\n right = '2px';\n } else {\n left = '2px';\n }\n } else if (size === 3) {\n if (index === 0) {\n right = '2px';\n } else if (index > 0) {\n left = '2px';\n }\n\n if (index === 1) {\n bottom = '2px';\n } else if (index > 1) {\n top = '2px';\n }\n } else if (size === 4) {\n if (index === 0 || index === 2) {\n right = '2px';\n }\n\n if (index === 1 || index === 3) {\n left = '2px';\n }\n\n if (index < 2) {\n bottom = '2px';\n } else {\n top = '2px';\n }\n }\n\n let thumbnail = '';\n\n if (attachment.get('type') === 'image') {\n const previewUrl = attachment.get('preview_url');\n const previewWidth = attachment.getIn(['meta', 'small', 'width']);\n\n const originalUrl = attachment.get('url');\n const originalWidth = attachment.getIn(['meta', 'original', 'width']);\n\n const hasSize = typeof originalWidth === 'number' && typeof previewWidth === 'number';\n\n const srcSet = hasSize ? `${originalUrl} ${originalWidth}w, ${previewUrl} ${previewWidth}w` : null;\n const sizes = hasSize ? `${displayWidth * (width / 100)}px` : null;\n\n const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0;\n const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0;\n const x = ((focusX / 2) + .5) * 100;\n const y = ((focusY / -2) + .5) * 100;\n\n thumbnail = (\n <a\n className='media-gallery__item-thumbnail'\n href={attachment.get('remote_url') || originalUrl}\n onClick={this.handleClick}\n target='_blank'\n >\n <img\n src={previewUrl}\n srcSet={srcSet}\n sizes={sizes}\n alt={attachment.get('description')}\n title={attachment.get('description')}\n style={{ objectPosition: `${x}% ${y}%` }}\n />\n </a>\n );\n } else if (attachment.get('type') === 'audio') {\n thumbnail = (\n <div className='media-gallery__audio'>\n <audio\n className='media-gallery__item-audio-thumbnail'\n aria-label={attachment.get('description')}\n role='application'\n src={attachment.get('url')}\n loop\n controls\n />\n </div>\n );\n } else if (attachment.get('type') === 'gifv') {\n const autoPlay = !isIOS() && autoPlayGif;\n\n thumbnail = (\n <div className={classNames('media-gallery__gifv', { autoplay: autoPlay })}>\n <video\n className='media-gallery__item-gifv-thumbnail'\n aria-label={attachment.get('description')}\n role='application'\n src={attachment.get('url')}\n onClick={this.handleClick}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n autoPlay={autoPlay}\n loop\n muted\n />\n\n <span className='media-gallery__gifv__label'>GIF</span>\n </div>\n );\n }\n\n return (\n <div className={classNames('media-gallery__item', { standalone })} key={attachment.get('id')} style={{ left: left, top: top, right: right, bottom: bottom, width: `${width}%`, height: `${height}%` }}>\n {thumbnail}\n </div>\n );\n }\n\n}\n\n@injectIntl\nexport default class MediaGallery extends React.PureComponent {\n\n static propTypes = {\n sensitive: PropTypes.bool,\n standalone: PropTypes.bool,\n media: ImmutablePropTypes.list.isRequired,\n size: PropTypes.object,\n height: PropTypes.number.isRequired,\n onOpenMedia: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n static defaultProps = {\n standalone: false,\n };\n\n state = {\n visible: !this.props.sensitive || displaySensitiveMedia,\n };\n\n componentWillReceiveProps (nextProps) {\n if (!is(nextProps.media, this.props.media)) {\n this.setState({ visible: !nextProps.sensitive });\n }\n }\n\n handleOpen = () => {\n this.setState({ visible: !this.state.visible });\n }\n\n handleClick = (index) => {\n this.props.onOpenMedia(this.props.media, index);\n }\n\n handleRef = (node) => {\n if (node /*&& this.isStandaloneEligible()*/) {\n // offsetWidth triggers a layout, so only calculate when we need to\n this.setState({\n width: node.offsetWidth,\n });\n }\n }\n\n isStandaloneEligible() {\n const { media, standalone } = this.props;\n return standalone && media.size === 1 && media.getIn([0, 'meta', 'small', 'aspect']);\n }\n\n render () {\n const { media, intl, sensitive, height } = this.props;\n const { width, visible } = this.state;\n\n let children;\n\n const style = {};\n\n if (this.isStandaloneEligible()) {\n if (width) {\n style.height = width / this.props.media.getIn([0, 'meta', 'small', 'aspect']);\n }\n } else if (width) {\n style.height = width / (16/9);\n } else {\n style.height = height;\n }\n\n if (!visible) {\n let warning;\n\n if (sensitive) {\n warning = <FormattedMessage id='status.sensitive_warning' defaultMessage='Sensitive content' />;\n } else {\n warning = <FormattedMessage id='status.media_hidden' defaultMessage='Media hidden' />;\n }\n\n children = (\n <button type='button' className='media-spoiler' onClick={this.handleOpen} style={style} ref={this.handleRef}>\n <span className='media-spoiler__warning'>{warning}</span>\n <span className='media-spoiler__trigger'><FormattedMessage id='status.sensitive_toggle' defaultMessage='Click to view' /></span>\n </button>\n );\n } else {\n const size = media.take(4).size;\n\n if (this.isStandaloneEligible()) {\n children = <Item standalone onClick={this.handleClick} attachment={media.get(0)} displayWidth={width} />;\n } else {\n children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} onClick={this.handleClick} attachment={attachment} index={i} size={size} displayWidth={width} />);\n }\n }\n\n return (\n <div className='media-gallery' style={style} ref={this.handleRef}>\n <div className={classNames('spoiler-button', { 'spoiler-button--visible': visible })}>\n <IconButton title={intl.formatMessage(messages.toggle_visible)} icon={visible ? 'eye' : 'eye-slash'} overlay onClick={this.handleOpen} />\n </div>\n\n {children}\n </div>\n );\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/components/media_gallery.js","import Immutable from 'immutable';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { fetchStatus } from '../../actions/statuses';\nimport MissingIndicator from '../../components/missing_indicator';\nimport DetailedStatus from './components/detailed_status';\nimport ActionBar from './components/action_bar';\nimport Column from '../ui/components/column';\nimport {\n favourite,\n unfavourite,\n reblog,\n unreblog,\n pin,\n unpin,\n} from '../../actions/interactions';\nimport {\n replyCompose,\n mentionCompose,\n directCompose,\n} from '../../actions/compose';\nimport { blockAccount } from '../../actions/accounts';\nimport {\n muteStatus,\n unmuteStatus,\n deleteStatus,\n hideStatus,\n revealStatus,\n} from '../../actions/statuses';\nimport { initMuteModal } from '../../actions/mutes';\nimport { initReport } from '../../actions/reports';\nimport { makeGetStatus } from '../../selectors';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport StatusContainer from '../../containers/status_container';\nimport { openModal } from '../../actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, deleteModal } from '../../initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../../features/ui/util/fullscreen';\n\nconst messages = defineMessages({\n deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },\n deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },\n blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },\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});\n\nconst makeMapStateToProps = () => {\n const getStatus = makeGetStatus();\n\n const mapStateToProps = (state, props) => {\n const status = getStatus(state, props.params.statusId);\n let ancestorsIds = Immutable.List();\n let descendantsIds = Immutable.List();\n\n if (status) {\n ancestorsIds = ancestorsIds.withMutations(mutable => {\n let id = status.get('in_reply_to_id');\n\n while (id) {\n mutable.unshift(id);\n id = state.getIn(['contexts', 'inReplyTos', id]);\n }\n });\n\n descendantsIds = descendantsIds.withMutations(mutable => {\n const ids = [status.get('id')];\n\n while (ids.length > 0) {\n let id = ids.shift();\n const replies = state.getIn(['contexts', 'replies', id]);\n\n if (replies) {\n replies.forEach(reply => {\n mutable.push(reply);\n ids.unshift(reply);\n });\n }\n }\n });\n }\n\n return {\n status,\n ancestorsIds,\n descendantsIds,\n };\n };\n\n return mapStateToProps;\n};\n\n@injectIntl\n@connect(makeMapStateToProps)\nexport default class Status extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n status: ImmutablePropTypes.map,\n ancestorsIds: ImmutablePropTypes.list,\n descendantsIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n };\n\n state = {\n fullscreen: false,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchStatus(this.props.params.statusId));\n }\n\n componentDidMount () {\n attachFullscreenListener(this.onFullScreenChange);\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this._scrolledIntoView = false;\n this.props.dispatch(fetchStatus(nextProps.params.statusId));\n }\n }\n\n handleFavouriteClick = (status) => {\n if (status.get('favourited')) {\n this.props.dispatch(unfavourite(status));\n } else {\n this.props.dispatch(favourite(status));\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 this.props.dispatch(replyCompose(status, this.context.router.history));\n }\n\n handleModalReblog = (status) => {\n this.props.dispatch(reblog(status));\n }\n\n handleReblogClick = (status, e) => {\n if (status.get('reblogged')) {\n this.props.dispatch(unreblog(status));\n } else {\n if (e.shiftKey || !boostModal) {\n this.handleModalReblog(status);\n } else {\n this.props.dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));\n }\n }\n }\n\n handleDeleteClick = (status) => {\n const { dispatch, intl } = this.props;\n\n if (!deleteModal) {\n dispatch(deleteStatus(status.get('id')));\n } else {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.deleteMessage),\n confirm: intl.formatMessage(messages.deleteConfirm),\n onConfirm: () => dispatch(deleteStatus(status.get('id'))),\n }));\n }\n }\n\n handleDirectClick = (account, router) => {\n this.props.dispatch(directCompose(account, router));\n }\n\n handleMentionClick = (account, router) => {\n this.props.dispatch(mentionCompose(account, router));\n }\n\n handleOpenMedia = (media, index) => {\n this.props.dispatch(openModal('MEDIA', { media, index }));\n }\n\n handleOpenVideo = (media, time) => {\n this.props.dispatch(openModal('VIDEO', { media, time }));\n }\n\n handleMuteClick = (account) => {\n this.props.dispatch(initMuteModal(account));\n }\n\n handleConversationMuteClick = (status) => {\n if (status.get('muted')) {\n this.props.dispatch(unmuteStatus(status.get('id')));\n } else {\n this.props.dispatch(muteStatus(status.get('id')));\n }\n }\n\n handleToggleHidden = (status) => {\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(status.get('id')));\n } else {\n this.props.dispatch(hideStatus(status.get('id')));\n }\n }\n\n handleToggleAll = () => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(statusIds));\n } else {\n this.props.dispatch(hideStatus(statusIds));\n }\n }\n\n handleBlockClick = (account) => {\n const { dispatch, intl } = this.props;\n\n dispatch(openModal('CONFIRM', {\n message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,\n confirm: intl.formatMessage(messages.blockConfirm),\n onConfirm: () => dispatch(blockAccount(account.get('id'))),\n }));\n }\n\n handleReport = (status) => {\n this.props.dispatch(initReport(status.get('account'), status));\n }\n\n handleEmbed = (status) => {\n this.props.dispatch(openModal('EMBED', { url: status.get('url') }));\n }\n\n handleHotkeyMoveUp = () => {\n this.handleMoveUp(this.props.status.get('id'));\n }\n\n handleHotkeyMoveDown = () => {\n this.handleMoveDown(this.props.status.get('id'));\n }\n\n handleHotkeyReply = e => {\n e.preventDefault();\n this.handleReplyClick(this.props.status);\n }\n\n handleHotkeyFavourite = () => {\n this.handleFavouriteClick(this.props.status);\n }\n\n handleHotkeyBoost = () => {\n this.handleReblogClick(this.props.status);\n }\n\n handleHotkeyMention = e => {\n e.preventDefault();\n this.handleMentionClick(this.props.status);\n }\n\n handleHotkeyOpenProfile = () => {\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n }\n\n handleHotkeyToggleHidden = () => {\n this.handleToggleHidden(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);\n } else {\n let index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n this._selectChild(ancestorsIds.size + index);\n } else {\n this._selectChild(index - 1);\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);\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);\n } else {\n this._selectChild(index + 1);\n }\n }\n }\n\n _selectChild (index) {\n const element = this.node.querySelectorAll('.focusable')[index];\n\n if (element) {\n element.focus();\n }\n }\n\n renderChildren (list) {\n return list.map(id => (\n <StatusContainer\n key={id}\n id={id}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n />\n ));\n }\n\n setRef = c => {\n this.node = c;\n }\n\n componentDidUpdate () {\n if (this._scrolledIntoView) {\n return;\n }\n\n const { status, ancestorsIds } = this.props;\n\n if (status && ancestorsIds && ancestorsIds.size > 0) {\n const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];\n\n element.scrollIntoView(true);\n this._scrolledIntoView = true;\n }\n }\n\n componentWillUnmount () {\n detachFullscreenListener(this.onFullScreenChange);\n }\n\n onFullScreenChange = () => {\n this.setState({ fullscreen: isFullscreen() });\n }\n\n render () {\n let ancestors, descendants;\n const { status, ancestorsIds, descendantsIds, intl } = this.props;\n const { fullscreen } = this.state;\n\n if (status === null) {\n return (\n <Column>\n <ColumnBackButton />\n <MissingIndicator />\n </Column>\n );\n }\n\n if (ancestorsIds && ancestorsIds.size > 0) {\n ancestors = <div>{this.renderChildren(ancestorsIds)}</div>;\n }\n\n if (descendantsIds && descendantsIds.size > 0) {\n descendants = <div>{this.renderChildren(descendantsIds)}</div>;\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 mention: this.handleHotkeyMention,\n openProfile: this.handleHotkeyOpenProfile,\n toggleHidden: this.handleHotkeyToggleHidden,\n };\n\n return (\n <Column>\n <ColumnHeader\n showBackButton\n extraButton={(\n <button className='column-header__button' title={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={status.get('hidden') ? 'false' : 'true'}><i className={`fa fa-${status.get('hidden') ? 'eye-slash' : 'eye'}`} /></button>\n )}\n />\n\n <ScrollContainer scrollKey='thread'>\n <div className={classNames('scrollable', 'detailed-status__wrapper', { fullscreen })} ref={this.setRef}>\n {ancestors}\n\n <HotKeys handlers={handlers}>\n <div className='focusable' tabIndex='0'>\n <DetailedStatus\n status={status}\n onOpenVideo={this.handleOpenVideo}\n onOpenMedia={this.handleOpenMedia}\n onToggleHidden={this.handleToggleHidden}\n />\n\n <ActionBar\n status={status}\n onReply={this.handleReplyClick}\n onFavourite={this.handleFavouriteClick}\n onReblog={this.handleReblogClick}\n onDelete={this.handleDeleteClick}\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 </div>\n </ScrollContainer>\n </Column>\n );\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/status/index.js","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nconst MissingIndicator = () => (\n <div className='regeneration-indicator missing-indicator'>\n <div>\n <div className='regeneration-indicator__figure' />\n\n <div className='regeneration-indicator__label'>\n <FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' />\n <FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' />\n </div>\n </div>\n </div>\n);\n\nexport default MissingIndicator;\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/components/missing_indicator.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Immutable from 'immutable';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport punycode from 'punycode';\nimport classnames from 'classnames';\n\nconst IDNA_PREFIX = 'xn--';\n\nconst decodeIDNA = domain => {\n return domain\n .split('.')\n .map(part => part.indexOf(IDNA_PREFIX) === 0 ? punycode.decode(part.slice(IDNA_PREFIX.length)) : part)\n .join('.');\n};\n\nconst getHostname = url => {\n const parser = document.createElement('a');\n parser.href = url;\n return parser.hostname;\n};\n\nconst trim = (text, len) => {\n const cut = text.indexOf(' ', len);\n\n if (cut === -1) {\n return text;\n }\n\n return text.substring(0, cut) + (text.length > len ? '…' : '');\n};\n\nconst domParser = new DOMParser();\n\nconst addAutoPlay = html => {\n const document = domParser.parseFromString(html, 'text/html').documentElement;\n const iframe = document.querySelector('iframe');\n\n if (iframe) {\n if (iframe.src.indexOf('?') !== -1) {\n iframe.src += '&';\n } else {\n iframe.src += '?';\n }\n\n iframe.src += 'autoplay=1&auto_play=1';\n\n // DOM parser creates html/body elements around original HTML fragment,\n // so we need to get innerHTML out of the body and not the entire document\n return document.querySelector('body').innerHTML;\n }\n\n return html;\n};\n\nexport default class Card extends React.PureComponent {\n\n static propTypes = {\n card: ImmutablePropTypes.map,\n maxDescription: PropTypes.number,\n onOpenMedia: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n maxDescription: 50,\n };\n\n state = {\n width: 280,\n embedded: false,\n };\n\n componentWillReceiveProps (nextProps) {\n if (this.props.card !== nextProps.card) {\n this.setState({ embedded: false });\n }\n }\n\n handlePhotoClick = () => {\n const { card, onOpenMedia } = this.props;\n\n onOpenMedia(\n Immutable.fromJS([\n {\n type: 'image',\n url: card.get('embed_url'),\n description: card.get('title'),\n meta: {\n original: {\n width: card.get('width'),\n height: card.get('height'),\n },\n },\n },\n ]),\n 0\n );\n };\n\n handleEmbedClick = () => {\n const { card } = this.props;\n\n if (card.get('type') === 'photo') {\n this.handlePhotoClick();\n } else {\n this.setState({ embedded: true });\n }\n }\n\n setRef = c => {\n if (c) {\n this.setState({ width: c.offsetWidth });\n }\n }\n\n renderVideo () {\n const { card } = this.props;\n const content = { __html: addAutoPlay(card.get('html')) };\n const { width } = this.state;\n const ratio = card.get('width') / card.get('height');\n const height = card.get('width') > card.get('height') ? (width / ratio) : (width * ratio);\n\n return (\n <div\n ref={this.setRef}\n className='status-card__image status-card-video'\n dangerouslySetInnerHTML={content}\n style={{ height }}\n />\n );\n }\n\n render () {\n const { card, maxDescription } = this.props;\n const { width, embedded } = this.state;\n\n if (card === null) {\n return null;\n }\n\n const provider = card.get('provider_name').length === 0 ? decodeIDNA(getHostname(card.get('url'))) : card.get('provider_name');\n const horizontal = card.get('width') > card.get('height') && (card.get('width') + 100 >= width) || card.get('type') !== 'link';\n const className = classnames('status-card', { horizontal });\n const interactive = card.get('type') !== 'link';\n const title = interactive ? <a className='status-card__title' href={card.get('url')} title={card.get('title')} rel='noopener' target='_blank'><strong>{card.get('title')}</strong></a> : <strong className='status-card__title' title={card.get('title')}>{card.get('title')}</strong>;\n const ratio = card.get('width') / card.get('height');\n const height = card.get('width') > card.get('height') ? (width / ratio) : (width * ratio);\n\n const description = (\n <div className='status-card__content'>\n {title}\n {!horizontal && <p className='status-card__description'>{trim(card.get('description') || '', maxDescription)}</p>}\n <span className='status-card__host'>{provider}</span>\n </div>\n );\n\n let embed = '';\n let thumbnail = <div style={{ backgroundImage: `url(${card.get('image')})`, width: horizontal ? width : null, height: horizontal ? height : null }} className='status-card__image-image' />;\n\n if (interactive) {\n if (embedded) {\n embed = this.renderVideo();\n } else {\n let iconVariant = 'play';\n\n if (card.get('type') === 'photo') {\n iconVariant = 'search-plus';\n }\n\n embed = (\n <div className='status-card__image'>\n {thumbnail}\n\n <div className='status-card__actions'>\n <div>\n <button onClick={this.handleEmbedClick}><i className={`fa fa-${iconVariant}`} /></button>\n <a href={card.get('url')} target='_blank' rel='noopener'><i className='fa fa-external-link' /></a>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={className} ref={this.setRef}>\n {embed}\n {description}\n </div>\n );\n } else if (card.get('image')) {\n embed = (\n <div className='status-card__image'>\n {thumbnail}\n </div>\n );\n }\n\n return (\n <a href={card.get('url')} className={className} target='_blank' rel='noopener' ref={this.setRef}>\n {embed}\n {description}\n </a>\n );\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/status/components/card.js","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/node-libs-browser/node_modules/punycode/punycode.js"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/status/components/detailed_status.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/status/components/action_bar.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/status/index.js"],"names":["DetailedStatus","height","e","button","ctrlKey","metaKey","context","router","preventDefault","history","push","props","status","getIn","stopPropagation","media","startTime","onOpenVideo","onToggleHidden","c","node","_measureHeight","href","target","nodeName","parentNode","window","open","heightJustChanged","this","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","state","render","get","outerStyle","boxSizing","compact","applicationLink","reblogLink","reblogIcon","favouriteLink","size","attachment","src","alt","duration","preload","preview","blurhash","width","inline","handleOpenVideo","sensitive","visible","showMedia","onToggleVisibility","onToggleMediaVisibility","standalone","onOpenMedia","length","card","className","rel","id","to","value","onClick","handleModalLink","style","ref","setRef","classNames","handleAccountClick","account","localDomain","domain","expanded","onExpandedToggle","handleExpandedToggle","Date","hour12","year","month","day","hour","minute","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","func","isRequired","bool","string","messages","defineMessages","delete","redraft","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","bookmark","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","copy","blockDomain","unblockDomain","unmute","unblock","ActionBar","connect","relationship","injectIntl","onReply","onReblog","onFavourite","onBookmark","onDelete","onDirect","onMention","onMute","onUnmute","onBlock","onUnblock","onBlockDomain","split","onUnblockDomain","onMuteConversation","onReport","onPin","navigator","text","url","onEmbed","textarea","document","createElement","textContent","position","body","appendChild","select","execCommand","removeChild","intl","publicStatus","includes","mutingConversation","menu","formatMessage","action","handleCopy","handleEmbed","me","handlePinClick","handleReblogClick","handleConversationMuteClick","handleDeleteClick","handleRedraftClick","name","handleMentionClick","handleDirectClick","handleMuteClick","handleBlockClick","handleReport","handleUnblockDomain","handleBlockDomain","isStaff","replyIcon","shareButton","title","icon","handleShare","reblog_disabled","handleReplyClick","disabled","active","animate","handleFavouriteClick","handleBookmarkClick","items","direction","React","PureComponent","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","blockDomainConfirm","Status","getStatus","makeGetStatus","getAncestorsIds","createSelector","_","statusId","inReplyTos","ancestorsIds","Immutable","List","withMutations","mutable","unshift","getDescendantsIds","contextReplies","statuses","descendantsIds","ids","shift","replies","reverse","forEach","insertAt","findIndex","idx","splice","params","askReplyConfirmation","trim","fullscreen","defaultMediaVisibility","loadedStatusId","undefined","dispatch","unfavourite","openModal","message","confirm","onConfirm","replyCompose","unreblog","shiftKey","boostModal","handleModalReblog","unbookmark","withRedraft","deleteModal","deleteStatus","directCompose","mentionCompose","index","time","_properStatus","handleOpenMedia","initMuteModal","unmuteStatus","muteStatus","revealStatus","hideStatus","statusIds","concat","toJS","initBlockModal","initReport","unmuteAccount","unblockAccount","defaultMessage","values","handleMoveUp","handleMoveDown","handleToggleHidden","handleToggleMediaVisibility","_selectChild","indexOf","isFullscreen","componentWillMount","fetchStatus","componentDidMount","attachFullscreenListener","onFullScreenChange","componentWillReceiveProps","nextProps","_scrolledIntoView","align_top","container","element","querySelectorAll","scrollTop","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","renderChildren","list","onMoveUp","onMoveDown","contextType","requestAnimationFrame","componentWillUnmount","detachFullscreenListener","ancestors","descendants","shouldUpdateScroll","multiColumn","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleHidden","handleHotkeyToggleHidden","toggleSensitive","handleHotkeyToggleSensitive","openMedia","handleHotkeyOpenMedia","bindToDocument","label","showBackButton","extraButton","aria-label","handleToggleAll","aria-pressed","scrollKey","tabIndex","textForScreenReader","handleUnmuteClick","handleUnblockClick","handleBlockDomainClick","handleUnblockDomainClick","handlePin"],"mappings":"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","file":"features/status.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport StatusContent from '../../../components/status_content';\nimport MediaGallery from '../../../components/media_gallery';\nimport { Link } from 'react-router-dom';\nimport { FormattedDate, FormattedNumber } from 'react-intl';\nimport Card from './card';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Video from '../../video';\nimport Audio from '../../audio';\nimport scheduleIdleTask from '../../ui/util/schedule_idle_task';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/components/icon';\n\nexport default class DetailedStatus extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map,\n onOpenMedia: PropTypes.func.isRequired,\n onOpenVideo: PropTypes.func.isRequired,\n onToggleHidden: PropTypes.func.isRequired,\n measureHeight: PropTypes.bool,\n onHeightChange: PropTypes.func,\n domain: PropTypes.string.isRequired,\n compact: PropTypes.bool,\n showMedia: PropTypes.bool,\n onToggleMediaVisibility: PropTypes.func,\n };\n\n state = {\n height: null,\n };\n\n handleAccountClick = (e) => {\n if (e.button === 0 && !(e.ctrlKey || e.metaKey) && this.context.router) {\n e.preventDefault();\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n }\n\n e.stopPropagation();\n }\n\n handleOpenVideo = (media, startTime) => {\n this.props.onOpenVideo(media, startTime);\n }\n\n handleExpandedToggle = () => {\n this.props.onToggleHidden(this.props.status);\n }\n\n _measureHeight (heightJustChanged) {\n if (this.props.measureHeight && this.node) {\n scheduleIdleTask(() => this.node && this.setState({ height: Math.ceil(this.node.scrollHeight) + 1 }));\n\n if (this.props.onHeightChange && heightJustChanged) {\n this.props.onHeightChange();\n }\n }\n }\n\n setRef = c => {\n this.node = c;\n this._measureHeight();\n }\n\n componentDidUpdate (prevProps, prevState) {\n this._measureHeight(prevState.height !== this.state.height);\n }\n\n handleModalLink = e => {\n e.preventDefault();\n\n let href;\n\n if (e.target.nodeName !== 'A') {\n href = e.target.parentNode.href;\n } else {\n href = e.target.href;\n }\n\n window.open(href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n }\n\n render () {\n const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status;\n const outerStyle = { boxSizing: 'border-box' };\n const { compact } = this.props;\n\n if (!status) {\n return null;\n }\n\n let media = '';\n let applicationLink = '';\n let reblogLink = '';\n let reblogIcon = 'retweet';\n let favouriteLink = '';\n\n if (this.props.measureHeight) {\n outerStyle.height = `${this.state.height}px`;\n }\n\n if (status.get('media_attachments').size > 0) {\n if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n const attachment = status.getIn(['media_attachments', 0]);\n\n media = (\n <Audio\n src={attachment.get('url')}\n alt={attachment.get('description')}\n duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n height={110}\n preload\n />\n );\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const attachment = status.getIn(['media_attachments', 0]);\n\n media = (\n <Video\n preview={attachment.get('preview_url')}\n blurhash={attachment.get('blurhash')}\n src={attachment.get('url')}\n alt={attachment.get('description')}\n width={300}\n height={150}\n inline\n onOpenVideo={this.handleOpenVideo}\n sensitive={status.get('sensitive')}\n visible={this.props.showMedia}\n onToggleVisibility={this.props.onToggleMediaVisibility}\n />\n );\n } else {\n media = (\n <MediaGallery\n standalone\n sensitive={status.get('sensitive')}\n media={status.get('media_attachments')}\n height={300}\n onOpenMedia={this.props.onOpenMedia}\n visible={this.props.showMedia}\n onToggleVisibility={this.props.onToggleMediaVisibility}\n />\n );\n }\n } else if (status.get('spoiler_text').length === 0) {\n media = <Card onOpenMedia={this.props.onOpenMedia} card={status.get('card', null)} />;\n }\n\n if (status.get('application')) {\n applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener noreferrer'>{status.getIn(['application', 'name'])}</a></span>;\n }\n\n if (status.get('visibility') === 'direct') {\n reblogIcon = 'envelope';\n } else if (status.get('visibility') === 'private') {\n reblogIcon = 'lock';\n }\n\n if (status.get('visibility') === 'private') {\n reblogLink = <Icon id={reblogIcon} />;\n } else if (this.context.router) {\n reblogLink = (\n <Link to={`/statuses/${status.get('id')}/reblogs`} className='detailed-status__link'>\n <Icon id={reblogIcon} />\n <span className='detailed-status__reblogs'>\n <FormattedNumber value={status.get('reblogs_count')} />\n </span>\n </Link>\n );\n } else {\n reblogLink = (\n <a href={`/interact/${status.get('id')}?type=reblog`} className='detailed-status__link' onClick={this.handleModalLink}>\n <Icon id={reblogIcon} />\n <span className='detailed-status__reblogs'>\n <FormattedNumber value={status.get('reblogs_count')} />\n </span>\n </a>\n );\n }\n\n if (this.context.router) {\n favouriteLink = (\n <Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'>\n <Icon id='star' />\n <span className='detailed-status__favorites'>\n <FormattedNumber value={status.get('favourites_count')} />\n </span>\n </Link>\n );\n } else {\n favouriteLink = (\n <a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}>\n <Icon id='star' />\n <span className='detailed-status__favorites'>\n <FormattedNumber value={status.get('favourites_count')} />\n </span>\n </a>\n );\n }\n\n return (\n <div style={outerStyle}>\n <div ref={this.setRef} className={classNames('detailed-status', { compact })}>\n <a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='detailed-status__display-name'>\n <div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={48} /></div>\n <DisplayName account={status.get('account')} localDomain={this.props.domain} />\n </a>\n\n <StatusContent status={status} expanded={!status.get('hidden')} onExpandedToggle={this.handleExpandedToggle} />\n\n {media}\n\n <div className='detailed-status__meta'>\n <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener noreferrer'>\n <FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />\n </a>{applicationLink} · {reblogLink} · {favouriteLink}\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport IconButton from '../../../components/icon_button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport DropdownMenuContainer from '../../../containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { me, isStaff } from '../../../initial_state';\n\nconst messages = defineMessages({\n delete: { id: 'status.delete', defaultMessage: 'Delete' },\n redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },\n mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n reply: { id: 'status.reply', defaultMessage: 'Reply' },\n reblog: { id: 'status.reblog', defaultMessage: 'Boost' },\n reblog_private: { id: 'status.reblog_private', defaultMessage: 'Boost to original audience' },\n cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' },\n cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },\n favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n mute: { id: 'status.mute', defaultMessage: 'Mute @{name}' },\n muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n block: { id: 'status.block', defaultMessage: 'Block @{name}' },\n report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n share: { id: 'status.share', defaultMessage: 'Share' },\n pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },\n unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' },\n embed: { id: 'status.embed', defaultMessage: 'Embed' },\n admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },\n admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' },\n copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },\n blockDomain: { id: 'account.block_domain', defaultMessage: 'Hide everything from {domain}' },\n unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },\n unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },\n unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },\n});\n\nconst mapStateToProps = (state, { status }) => ({\n relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass ActionBar extends React.PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map.isRequired,\n relationship: ImmutablePropTypes.map,\n onReply: PropTypes.func.isRequired,\n onReblog: PropTypes.func.isRequired,\n onFavourite: PropTypes.func.isRequired,\n onBookmark: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onDirect: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n onMute: PropTypes.func,\n onUnmute: PropTypes.func,\n onBlock: PropTypes.func,\n onUnblock: PropTypes.func,\n onBlockDomain: PropTypes.func,\n onUnblockDomain: PropTypes.func,\n onMuteConversation: PropTypes.func,\n onReport: PropTypes.func,\n onPin: PropTypes.func,\n onEmbed: PropTypes.func,\n intl: PropTypes.object.isRequired,\n };\n\n handleReplyClick = () => {\n this.props.onReply(this.props.status);\n }\n\n handleReblogClick = (e) => {\n this.props.onReblog(this.props.status, e);\n }\n\n handleFavouriteClick = () => {\n this.props.onFavourite(this.props.status);\n }\n\n handleBookmarkClick = (e) => {\n this.props.onBookmark(this.props.status, e);\n }\n\n handleDeleteClick = () => {\n this.props.onDelete(this.props.status, this.context.router.history);\n }\n\n handleRedraftClick = () => {\n this.props.onDelete(this.props.status, this.context.router.history, true);\n }\n\n handleDirectClick = () => {\n this.props.onDirect(this.props.status.get('account'), this.context.router.history);\n }\n\n handleMentionClick = () => {\n this.props.onMention(this.props.status.get('account'), this.context.router.history);\n }\n\n handleMuteClick = () => {\n const { status, relationship, onMute, onUnmute } = this.props;\n const account = status.get('account');\n\n if (relationship && relationship.get('muting')) {\n onUnmute(account);\n } else {\n onMute(account);\n }\n }\n\n handleBlockClick = () => {\n const { status, relationship, onBlock, onUnblock } = this.props;\n const account = status.get('account');\n\n if (relationship && relationship.get('blocking')) {\n onUnblock(account);\n } else {\n onBlock(status);\n }\n }\n\n handleBlockDomain = () => {\n const { status, onBlockDomain } = this.props;\n const account = status.get('account');\n\n onBlockDomain(account.get('acct').split('@')[1]);\n }\n\n handleUnblockDomain = () => {\n const { status, onUnblockDomain } = this.props;\n const account = status.get('account');\n\n onUnblockDomain(account.get('acct').split('@')[1]);\n }\n\n handleConversationMuteClick = () => {\n this.props.onMuteConversation(this.props.status);\n }\n\n handleReport = () => {\n this.props.onReport(this.props.status);\n }\n\n handlePinClick = () => {\n this.props.onPin(this.props.status);\n }\n\n handleShare = () => {\n navigator.share({\n text: this.props.status.get('search_index'),\n url: this.props.status.get('url'),\n });\n }\n\n handleEmbed = () => {\n this.props.onEmbed(this.props.status);\n }\n\n handleCopy = () => {\n const url = this.props.status.get('url');\n const textarea = document.createElement('textarea');\n\n textarea.textContent = url;\n textarea.style.position = 'fixed';\n\n document.body.appendChild(textarea);\n\n try {\n textarea.select();\n document.execCommand('copy');\n } catch (e) {\n\n } finally {\n document.body.removeChild(textarea);\n }\n }\n\n render () {\n const { status, relationship, intl } = this.props;\n\n const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n const mutingConversation = status.get('muted');\n const account = status.get('account');\n\n let menu = [];\n\n if (publicStatus) {\n menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });\n menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n menu.push(null);\n }\n\n if (me === status.getIn(['account', 'id'])) {\n if (publicStatus) {\n menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n } else {\n if (status.get('visibility') === 'private') {\n menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog_private : messages.reblog_private), action: this.handleReblogClick });\n }\n }\n\n menu.push(null);\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.delete), action: this.handleDeleteClick });\n menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });\n } else {\n menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });\n menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick });\n menu.push(null);\n\n if (relationship && relationship.get('muting')) {\n menu.push({ text: intl.formatMessage(messages.unmute, { name: account.get('username') }), action: this.handleMuteClick });\n } else {\n menu.push({ text: intl.formatMessage(messages.mute, { name: account.get('username') }), action: this.handleMuteClick });\n }\n\n if (relationship && relationship.get('blocking')) {\n menu.push({ text: intl.formatMessage(messages.unblock, { name: account.get('username') }), action: this.handleBlockClick });\n } else {\n menu.push({ text: intl.formatMessage(messages.block, { name: account.get('username') }), action: this.handleBlockClick });\n }\n\n menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });\n\n if (account.get('acct') !== account.get('username')) {\n const domain = account.get('acct').split('@')[1];\n\n menu.push(null);\n\n if (relationship && relationship.get('domain_blocking')) {\n menu.push({ text: intl.formatMessage(messages.unblockDomain, { domain }), action: this.handleUnblockDomain });\n } else {\n menu.push({ text: intl.formatMessage(messages.blockDomain, { domain }), action: this.handleBlockDomain });\n }\n }\n\n if (isStaff) {\n menu.push(null);\n menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` });\n menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` });\n }\n }\n\n const shareButton = ('share' in navigator) && status.get('visibility') === 'public' && (\n <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.share)} icon='share-alt' onClick={this.handleShare} /></div>\n );\n\n let replyIcon;\n if (status.get('in_reply_to_id', null) === null) {\n replyIcon = 'reply';\n } else {\n replyIcon = 'reply-all';\n }\n\n let reblogIcon = 'retweet';\n if (status.get('visibility') === 'direct') reblogIcon = 'envelope';\n else if (status.get('visibility') === 'private') reblogIcon = 'lock';\n\n let reblog_disabled = (status.get('visibility') === 'direct' || status.get('visibility') === 'private');\n\n return (\n <div className='detailed-status__action-bar'>\n <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.reply)} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} /></div>\n <div className='detailed-status__button'><IconButton disabled={reblog_disabled} active={status.get('reblogged')} title={reblog_disabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(messages.reblog)} icon={reblogIcon} 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' onClick={this.handleFavouriteClick} /></div>\n {shareButton}\n <div className='detailed-status__button'><IconButton className='bookmark-icon' active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} /></div>\n\n <div className='detailed-status__action-bar-dropdown'>\n <DropdownMenuContainer size={18} icon='ellipsis-h' status={status} items={menu} direction='left' title='More' />\n </div>\n </div>\n );\n }\n\n}\n","import Immutable from 'immutable';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { createSelector } from 'reselect';\nimport { fetchStatus } from '../../actions/statuses';\nimport MissingIndicator from '../../components/missing_indicator';\nimport DetailedStatus from './components/detailed_status';\nimport ActionBar from './components/action_bar';\nimport Column from '../ui/components/column';\nimport {\n favourite,\n unfavourite,\n bookmark,\n unbookmark,\n reblog,\n unreblog,\n pin,\n unpin,\n} from '../../actions/interactions';\nimport {\n replyCompose,\n mentionCompose,\n directCompose,\n} from '../../actions/compose';\nimport {\n muteStatus,\n unmuteStatus,\n deleteStatus,\n hideStatus,\n revealStatus,\n} from '../../actions/statuses';\nimport {\n unblockAccount,\n unmuteAccount,\n} from '../../actions/accounts';\nimport {\n blockDomain,\n unblockDomain,\n} from '../../actions/domain_blocks';\nimport { initMuteModal } from '../../actions/mutes';\nimport { initBlockModal } from '../../actions/blocks';\nimport { initReport } from '../../actions/reports';\nimport { makeGetStatus } from '../../selectors';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport StatusContainer from '../../containers/status_container';\nimport { openModal } from '../../actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, deleteModal } from '../../initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';\nimport { textForScreenReader, defaultMediaVisibility } from '../../components/status';\nimport Icon from 'mastodon/components/icon';\n\nconst messages = defineMessages({\n deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },\n deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },\n redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },\n redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },\n revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },\n hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },\n detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },\n replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },\n replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },\n blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Hide entire domain' },\n});\n\nconst makeMapStateToProps = () => {\n const getStatus = makeGetStatus();\n\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) {\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.shift();\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 ids.unshift(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 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 status,\n ancestorsIds,\n descendantsIds,\n askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0,\n domain: state.getIn(['meta', 'domain']),\n };\n };\n\n return mapStateToProps;\n};\n\nexport default @injectIntl\n@connect(makeMapStateToProps)\nclass Status extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n status: ImmutablePropTypes.map,\n ancestorsIds: ImmutablePropTypes.list,\n descendantsIds: ImmutablePropTypes.list,\n intl: PropTypes.object.isRequired,\n askReplyConfirmation: PropTypes.bool,\n multiColumn: PropTypes.bool,\n domain: PropTypes.string.isRequired,\n };\n\n state = {\n fullscreen: false,\n showMedia: defaultMediaVisibility(this.props.status),\n loadedStatusId: undefined,\n };\n\n componentWillMount () {\n this.props.dispatch(fetchStatus(this.props.params.statusId));\n }\n\n componentDidMount () {\n attachFullscreenListener(this.onFullScreenChange);\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this._scrolledIntoView = false;\n this.props.dispatch(fetchStatus(nextProps.params.statusId));\n }\n\n if (nextProps.status && nextProps.status.get('id') !== this.state.loadedStatusId) {\n this.setState({ showMedia: defaultMediaVisibility(nextProps.status), loadedStatusId: nextProps.status.get('id') });\n }\n }\n\n handleToggleMediaVisibility = () => {\n this.setState({ showMedia: !this.state.showMedia });\n }\n\n handleFavouriteClick = (status) => {\n if (status.get('favourited')) {\n this.props.dispatch(unfavourite(status));\n } else {\n this.props.dispatch(favourite(status));\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 let { askReplyConfirmation, dispatch, intl } = this.props;\n if (askReplyConfirmation) {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.replyMessage),\n confirm: intl.formatMessage(messages.replyConfirm),\n onConfirm: () => dispatch(replyCompose(status, this.context.router.history)),\n }));\n } else {\n dispatch(replyCompose(status, this.context.router.history));\n }\n }\n\n handleModalReblog = (status) => {\n this.props.dispatch(reblog(status));\n }\n\n handleReblogClick = (status, e) => {\n if (status.get('reblogged')) {\n this.props.dispatch(unreblog(status));\n } else {\n if ((e && e.shiftKey) || !boostModal) {\n this.handleModalReblog(status);\n } else {\n this.props.dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));\n }\n }\n }\n\n handleBookmarkClick = (status) => {\n if (status.get('bookmarked')) {\n this.props.dispatch(unbookmark(status));\n } else {\n this.props.dispatch(bookmark(status));\n }\n }\n\n handleDeleteClick = (status, history, withRedraft = false) => {\n const { dispatch, intl } = this.props;\n\n if (!deleteModal) {\n dispatch(deleteStatus(status.get('id'), history, withRedraft));\n } else {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),\n confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),\n onConfirm: () => dispatch(deleteStatus(status.get('id'), history, withRedraft)),\n }));\n }\n }\n\n handleDirectClick = (account, router) => {\n this.props.dispatch(directCompose(account, router));\n }\n\n handleMentionClick = (account, router) => {\n this.props.dispatch(mentionCompose(account, router));\n }\n\n handleOpenMedia = (media, index) => {\n this.props.dispatch(openModal('MEDIA', { media, index }));\n }\n\n handleOpenVideo = (media, time) => {\n this.props.dispatch(openModal('VIDEO', { media, time }));\n }\n\n handleHotkeyOpenMedia = e => {\n const status = this._properStatus();\n\n e.preventDefault();\n\n if (status.get('media_attachments').size > 0) {\n if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n // TODO: toggle play/paused?\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n this.handleOpenVideo(status.getIn(['media_attachments', 0]), 0);\n } else {\n this.handleOpenMedia(status.get('media_attachments'), 0);\n }\n }\n }\n\n handleMuteClick = (account) => {\n this.props.dispatch(initMuteModal(account));\n }\n\n handleConversationMuteClick = (status) => {\n if (status.get('muted')) {\n this.props.dispatch(unmuteStatus(status.get('id')));\n } else {\n this.props.dispatch(muteStatus(status.get('id')));\n }\n }\n\n handleToggleHidden = (status) => {\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(status.get('id')));\n } else {\n this.props.dispatch(hideStatus(status.get('id')));\n }\n }\n\n handleToggleAll = () => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(statusIds));\n } else {\n this.props.dispatch(hideStatus(statusIds));\n }\n }\n\n handleBlockClick = (status) => {\n const { dispatch } = this.props;\n const account = status.get('account');\n dispatch(initBlockModal(account));\n }\n\n handleReport = (status) => {\n this.props.dispatch(initReport(status.get('account'), status));\n }\n\n handleEmbed = (status) => {\n this.props.dispatch(openModal('EMBED', { url: status.get('url') }));\n }\n\n handleUnmuteClick = account => {\n this.props.dispatch(unmuteAccount(account.get('id')));\n }\n\n handleUnblockClick = account => {\n this.props.dispatch(unblockAccount(account.get('id')));\n }\n\n handleBlockDomainClick = domain => {\n this.props.dispatch(openModal('CONFIRM', {\n message: <FormattedMessage id='confirmations.domain_block.message' defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.' values={{ domain: <strong>{domain}</strong> }} />,\n confirm: this.props.intl.formatMessage(messages.blockDomainConfirm),\n onConfirm: () => this.props.dispatch(blockDomain(domain)),\n }));\n }\n\n handleUnblockDomainClick = domain => {\n this.props.dispatch(unblockDomain(domain));\n }\n\n\n handleHotkeyMoveUp = () => {\n this.handleMoveUp(this.props.status.get('id'));\n }\n\n handleHotkeyMoveDown = () => {\n this.handleMoveDown(this.props.status.get('id'));\n }\n\n handleHotkeyReply = e => {\n e.preventDefault();\n this.handleReplyClick(this.props.status);\n }\n\n handleHotkeyFavourite = () => {\n this.handleFavouriteClick(this.props.status);\n }\n\n handleHotkeyBoost = () => {\n this.handleReblogClick(this.props.status);\n }\n\n handleHotkeyMention = e => {\n e.preventDefault();\n this.handleMentionClick(this.props.status.get('account'));\n }\n\n handleHotkeyOpenProfile = () => {\n this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n }\n\n handleHotkeyToggleHidden = () => {\n this.handleToggleHidden(this.props.status);\n }\n\n handleHotkeyToggleSensitive = () => {\n this.handleToggleMediaVisibility();\n }\n\n handleMoveUp = id => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n\n if (id === status.get('id')) {\n this._selectChild(ancestorsIds.size - 1, true);\n } else {\n let index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n this._selectChild(ancestorsIds.size + index, true);\n } else {\n this._selectChild(index - 1, true);\n }\n }\n }\n\n handleMoveDown = id => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n\n if (id === status.get('id')) {\n this._selectChild(ancestorsIds.size + 1, false);\n } else {\n let index = ancestorsIds.indexOf(id);\n\n if (index === -1) {\n index = descendantsIds.indexOf(id);\n this._selectChild(ancestorsIds.size + index + 2, false);\n } else {\n this._selectChild(index + 1, false);\n }\n }\n }\n\n _selectChild (index, align_top) {\n const container = this.node;\n const element = container.querySelectorAll('.focusable')[index];\n\n if (element) {\n if (align_top && container.scrollTop > element.offsetTop) {\n element.scrollIntoView(true);\n } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n element.scrollIntoView(false);\n }\n element.focus();\n }\n }\n\n renderChildren (list) {\n return list.map(id => (\n <StatusContainer\n key={id}\n id={id}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n contextType='thread'\n />\n ));\n }\n\n setRef = c => {\n this.node = c;\n }\n\n componentDidUpdate () {\n if (this._scrolledIntoView) {\n return;\n }\n\n const { status, ancestorsIds } = this.props;\n\n if (status && ancestorsIds && ancestorsIds.size > 0) {\n const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];\n\n window.requestAnimationFrame(() => {\n element.scrollIntoView(true);\n });\n this._scrolledIntoView = true;\n }\n }\n\n componentWillUnmount () {\n detachFullscreenListener(this.onFullScreenChange);\n }\n\n onFullScreenChange = () => {\n this.setState({ fullscreen: isFullscreen() });\n }\n\n render () {\n let ancestors, descendants;\n const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn } = this.props;\n const { fullscreen } = this.state;\n\n if (status === null) {\n return (\n <Column>\n <ColumnBackButton multiColumn={multiColumn} />\n <MissingIndicator />\n </Column>\n );\n }\n\n if (ancestorsIds && ancestorsIds.size > 0) {\n ancestors = <div>{this.renderChildren(ancestorsIds)}</div>;\n }\n\n if (descendantsIds && descendantsIds.size > 0) {\n descendants = <div>{this.renderChildren(descendantsIds)}</div>;\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 mention: this.handleHotkeyMention,\n openProfile: this.handleHotkeyOpenProfile,\n toggleHidden: this.handleHotkeyToggleHidden,\n toggleSensitive: this.handleHotkeyToggleSensitive,\n openMedia: this.handleHotkeyOpenMedia,\n };\n\n return (\n <Column bindToDocument={!multiColumn} label={intl.formatMessage(messages.detailedStatus)}>\n <ColumnHeader\n showBackButton\n multiColumn={multiColumn}\n extraButton={(\n <button className='column-header__button' title={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={status.get('hidden') ? 'false' : 'true'}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} /></button>\n )}\n />\n\n <ScrollContainer scrollKey='thread' shouldUpdateScroll={shouldUpdateScroll}>\n <div className={classNames('scrollable', { fullscreen })} ref={this.setRef}>\n {ancestors}\n\n <HotKeys handlers={handlers}>\n <div className={classNames('focusable', 'detailed-status__wrapper')} tabIndex='0' aria-label={textForScreenReader(intl, status, false)}>\n <DetailedStatus\n key={`details-${status.get('id')}`}\n status={status}\n onOpenVideo={this.handleOpenVideo}\n onOpenMedia={this.handleOpenMedia}\n onToggleHidden={this.handleToggleHidden}\n domain={domain}\n showMedia={this.state.showMedia}\n onToggleMediaVisibility={this.handleToggleMediaVisibility}\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 onDirect={this.handleDirectClick}\n onMention={this.handleMentionClick}\n onMute={this.handleMuteClick}\n onUnmute={this.handleUnmuteClick}\n onMuteConversation={this.handleConversationMuteClick}\n onBlock={this.handleBlockClick}\n onUnblock={this.handleUnblockClick}\n onBlockDomain={this.handleBlockDomainClick}\n onUnblockDomain={this.handleUnblockDomainClick}\n onReport={this.handleReport}\n onPin={this.handlePin}\n onEmbed={this.handleEmbed}\n />\n </div>\n </HotKeys>\n\n {descendants}\n </div>\n </ScrollContainer>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file