{"version":3,"sources":["webpack:///./app/javascript/packs/statuses.js","webpack:///./app/javascript/brighteon/features/ui/containers/account_action_button_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_button.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/containers/upload_button_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/containers/emoji_picker_dropdown_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/containers/upload_progress_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/components/upload.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/containers/upload_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/containers/sensitive_button_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/upload_form.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/index.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/containers/upload_form_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/compose_form.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/status_action_bar.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/status_reply/components/status_action_bar.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/status_reply/status_reply.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/status_reply/index.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/containers/status_reply_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/containers/compose_form_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/status_with_reply.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/index.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/containers/status_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/index.js","webpack:///./app/javascript/brighteon/features/ui/containers/new_post_modal_handler.js","webpack:///./app/javascript/brighteon/containers/standalone_account_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/emoji_picker_dropdown.js"],"names":["loaded","StandaloneAccountContainer","require","default","AccountActionButton","React","ReactDOM","mountNode","document","getElementById","RelationshipsNode","props","JSON","parse","getAttribute","render","FollowButtons","getElementsByClassName","index","length","start","loadPolyfills","then","ready","catch","error","console","getLocale","localeData","messages","addLocaleData","store","configureStore","initialState","dispatch","hydrateStore","AccountActionButtonContainer","state","status","target_account_id","handleFollow","followAccount","setState","handleUnfollow","unfollowAccount","componentDidMount","this","locale","className","onClick","role","tabIndex","PureComponent","defaultProps","local","settings","known_fediverse","defineMessages","upload","iconStyle","height","lineHeight","UploadButton","connect","acceptContentTypes","getIn","injectIntl","handleChange","e","target","files","onSelectFile","handleClick","onFocus","fileElement","click","setRef","c","intl","resetFileKey","unavailable","disabled","message","formatMessage","icon","title","size","inverted","style","display","key","ref","type","multiple","accept","toArray","join","onChange","ImmutablePureComponent","propTypes","PropTypes","bool","func","isRequired","object","number","ImmutablePropTypes","listOf","string","some","m","includes","get","uploadCompose","DEFAULTS","getFrequentlyUsedEmojis","createSelector","ImmutableMap","emojiCounters","emojis","keySeq","sort","a","b","reverse","slice","perLine","uniqueDefaults","filter","emoji","concat","getCustomEmojis","aShort","toLowerCase","bShort","custom_emojis","skinTone","frequentlyUsedEmojis","onPickEmoji","onSkinTone","changeSetting","useEmoji","EmojiPickerDropdown","active","progress","UploadProgress","Upload","handleUndoClick","stopPropagation","onUndo","media","handleFocalPointClick","onOpenFocalPoint","focusX","focusY","x","y","defaultStyle","scale","spring","stiffness","damping","transform","backgroundImage","backgroundPosition","classNames","id","defaultMessage","contextTypes","router","map","find","item","undoUploadCompose","openModal","onSubmit","submitCompose","marked","unmarked","SensitiveButton","mediaCount","name","checked","values","count","changeComposeSensitivity","UploadForm","mediaIds","isEmpty","list","allowedAroundShortCode","placeholder","spoiler_placeholder","publish","publishLoud","ComposeForm","jumping","inReplyTo","replyCompose","ancestor","value","handleKeyDown","keyCode","ctrlKey","metaKey","handleSubmit","text","autosuggestTextarea","textarea","isSubmitting","isChangingUpload","isUploading","anyMedia","fulltext","spoilerText","countableText","MAX_POST_CHARACTER_COUNT","trim","closeComposeModal","jumpSubmitButton","context","history","setTimeout","onSuggestionsClearRequested","onClearSuggestions","onSuggestionsFetchRequested","token","onFetchSuggestions","onSuggestionSelected","tokenStart","onSpoilerSuggestionSelected","handleChangeSpoilerText","onChangeSpoilerText","handleFocus","composeForm","scrollIntoView","behavior","block","setAutosuggestTextarea","passRefCb","setSpoilerText","handleEmojiPick","data","position","selectionStart","needsSpace","custom","componentDidUpdate","prevProps","getReplies","onPaste","disabledButton","publishText","privacy","suggestions","onKeyDown","autoFocus","max","spoiler","focusDate","instanceOf","Date","caretPosition","preselectDate","showSearch","any","singleColumn","delete","redraft","edit","direct","mention","mute","reply","share","more","replyAll","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","bookmark","removeBookmark","open","report","muteConversation","unmuteConversation","pin","unpin","embed","admin_account","admin_status","copy","blockDomain","unblockDomain","unmute","unblock","StatusActionBar","relationship","cryptoWallets","updateOnProps","handleReplyClick","me","onReply","_openInteractionDialog","handleShareClick","navigator","url","handleFavouriteClick","onFavourite","handleReblogClick","onReblog","window","handleBookmarkClick","onBookmark","handleDeleteClick","onDelete","handleRedraftClick","handleEditClick","onEdit","handlePinClick","onPin","handleMentionClick","openComposeModal","changeShowPrivacy","onMention","account","handleDirectClick","location","href","handleMuteClick","onMute","onUnmute","handleBlockClick","onBlock","onUnblock","handleBlockDomain","onBlockDomain","split","handleUnblockDomain","onUnblockDomain","handleOpen","handleEmbed","onEmbed","handleReport","onReport","handleConversationMuteClick","onMuteConversation","handleCopy","createElement","textContent","body","appendChild","select","execCommand","removeChild","toggleShowAllReplies","handleOpenRepliesModal","onOpenRepliesModal","handleOpenReblogsModal","onOpenReblogsModal","handleOpenFavouritesModal","onOpenFavouritesModal","handleShareStatus","onShareStatus","replyIcon","replyTitle","withDismiss","scrollKey","mutingConversation","anonymousAccess","publicStatus","menu","push","action","domain","isStaff","reblogPrivate","reblogTitle","pressed","animate","items","direction","accountId","accountName","onDirect","showAllReplies","textForScreenReader","rebloggedByText","displayName","formatDate","hour","minute","month","day","defaultMediaVisibility","displayMedia","StatusReply","showMedia","statusId","undefined","handleToggleMediaVisibility","handleExpandClick","button","handleAccountClick","currentTarget","preventDefault","handleExpandedToggle","onToggleHidden","_properStatus","handleCollapsedToggle","isCollapsed","onToggleCollapsed","handleOpenVideo","options","onOpenVideo","handleHotkeyOpenMedia","onOpenMedia","startTime","handleHotkeyReply","handleHotkeyFavourite","handleHotkeyBoost","handleHotkeyMention","handleHotkeyOpen","handleHotkeyOpenProfile","handleHotkeyMoveUp","onMoveUp","handleHotkeyMoveDown","onMoveDown","handleHotkeyToggleHidden","handleHotkeyToggleSensitive","handleRef","node","getDerivedStateFromProps","nextProps","prevState","renderLoadingMediaGallery","renderLoadingVideoPlayer","renderLoadingAudioPlayer","statusAvatar","prepend","hidden","featured","otherAccounts","unread","showThread","other","handlers","muted","boost","openProfile","moveUp","moveDown","toggleHidden","toggleSensitive","openMedia","focusable","minHandlers","fixedWidth","display_name_html","__html","dangerouslySetInnerHTML","compact","attachment","fetchComponent","Audio","loading","Component","src","alt","poster","backgroundColor","foregroundColor","accentColor","duration","width","cachedMediaWidth","cacheWidth","cacheMediaWidth","Video","preview","blurhash","inline","sensitive","visible","onToggleVisibility","MediaGallery","defaultWidth","card","read","rel","others","timestamp","expanded","onExpandedToggle","collapsable","onCollapsedToggle","children","onHeightChange","getScrollPosition","updateScrollBottom","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","replyConfirm","replyMessage","blockDomainConfirm","getStatus","makeGetStatus","_","getState","confirm","onConfirm","showComposePopup","onModalReblog","unreblog","shiftKey","boostModal","unfavourite","unbookmark","onError","showAlertForError","withRedraft","deleteModal","deleteStatus","editStatus","directCompose","mentionCompose","initBlockModal","unblockAccount","initReport","initMuteModal","unmuteAccount","unmuteStatus","muteStatus","revealStatus","hideStatus","toggleStatusCollapse","changeCompose","clearComposeSuggestions","fetchComposeSuggestions","suggestion","path","selectComposeSuggestion","changeComposeSpoilerText","insertEmojiCompose","closeModal","Status","importFetchedStatuses","Immutable","Map","rerenderFlag","showReplyBox","currentShowMediaOpt","newShowMedia","set","handleReply","replyTextareaRef","focus","setTextareaRef","getDescendants","status_id","api","descendants","ancestors","err","ensureShowReplyBox","checkIfAndroid","element","replyBox","yPosition","offsetTop","scrollTop","clientTop","offsetParent","scrollY","scrollBy","originContent","originStatus","avatar","replyOrigin","statuses","account_id","accounts","repliesCount","Object","toJS","st","in_reply_to_id","st1","st2","created_at","mediaSection","showPinnedMsg","pinned","username","origin","avatarStyle","backgroundSize","replies","idx","contextType","StatusWithReply","setPostForChat","getOrder","order","search","getParams","unpinned","params","pathname","aggregatedReplies","withReplies","onlyImage","onlyVideo","AccountTimeline","timelineId","generateTimelineId","timeline","statusIds","ImmutableList","isLoading","hasMore","handleLoadMore","maxId","last","requestParams","expandAccountTimeline","_connect","statusIdProp","loadMore","NewPostModalHandler","handleNewPostModal","onShowPopup","closeNewPostModal","showPopup","disconnect","connectUserStream","disconnectChat","connectChatStream","expandNotifications","setupBrowserNotifications","componentWillUnmount","show_pinned","donate_box_container","navigation_container","new_post_section","link_footer_node","BrowserRouter","createPortal","EmojiPicker","Emoji","emoji_search","emoji_not_found","recent","search_results","people","nature","food","activity","travel","objects","symbols","flags","assetHost","process","env","CDN_HOST","backgroundImageFn","listenerOptions","supportsPassiveEvents","passive","ModifierPickerMenu","onSelect","handleDocumentClick","contains","onClose","UNSAFE_componentWillReceiveProps","attachListeners","removeListeners","addEventListener","removeEventListener","sheetSize","skin","ModifierPicker","onOpen","handleSelect","modifier","EmojiPickerMenu","modifierOpen","placement","getI18n","notfound","categories","foods","places","event","native","colons","onPick","handleModifierOpen","handleModifierClose","handleModifierChange","top","pageYOffset","categoriesSort","splice","Array","from","categoriesFromEmojis","selecting","emojiSize","buildCustomEmojis","color","i18n","include","showPreview","emojiTooltip","dropdown","onShowDropdown","EmojiPickerAsync","EmojiMart","Picker","getBoundingClientRect","innerHeight","onHideDropdown","onToggle","setTargetRef","findTarget","show"],"mappings":"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","file":"js/statuses-32fe3a24560bf964ec66.chunk.js","sourcesContent":["import loadPolyfills from '../brighteon/load_polyfills';\nimport { start } from '../brighteon/common';\n\nstart();\n\nfunction loaded() {\n  const StandaloneAccountContainer = require('../brighteon/containers/standalone_account_container').default;\n  const AccountActionButton = require('../brighteon/features/ui/containers/account_action_button_container').default;\n  const React             = require('react');\n  const ReactDOM          = require('react-dom');\n  const mountNode         = document.getElementById('brighteon-statuses');\n  const RelationshipsNode = document.getElementById('relationships-accounts-container');\n\n  if (mountNode !== null) {\n    const props = JSON.parse(mountNode.getAttribute('data-props'));\n    ReactDOM.render(<StandaloneAccountContainer {...props} />, mountNode);\n  }\n\n  if (RelationshipsNode) {\n    const FollowButtons = RelationshipsNode.getElementsByClassName('relationship-action-button');\n\n    for (let index = 0; index < FollowButtons.length; index++) {\n      const props = JSON.parse(FollowButtons[index].getAttribute('data-props'));\n      ReactDOM.render(<AccountActionButton {...props} />, FollowButtons[index]);\n    }\n  }\n}\n\nfunction main() {\n  const ready = require('../brighteon/ready').default;\n  ready(loaded);\n}\n\nloadPolyfills().then(main).catch(error => {\n  console.error(error);\n});\n","import React, { Fragment } from 'react';\nimport { Provider } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport configureStore from '../../../store/configureStore';\nimport { hydrateStore } from '../../../actions/store';\nimport { IntlProvider, addLocaleData } from 'react-intl';\nimport { getLocale } from '../../../locales';\nimport initialState from '../../../initial_state';\nimport {\n  followAccount,\n  unfollowAccount,\n} from 'brighteon/actions/accounts';\n\nconst { localeData, messages } = getLocale();\naddLocaleData(localeData);\n\nconst store = configureStore();\n\nif (initialState) {\n  store.dispatch(hydrateStore(initialState));\n}\n\nexport default class AccountActionButtonContainer extends React.PureComponent {\n\n  static propTypes = {\n    locale: PropTypes.string,\n    status: PropTypes.object,\n    target_account_id: PropTypes.string,\n  };\n\n  static defaultProps = {\n    local: !initialState.settings.known_fediverse,\n  };\n\n  state = {\n    status: 'following',\n    target_account_id: '0',\n  }\n\n  componentDidMount() {\n    this.setState({\n      status: this.props.status,\n      target_account_id: this.props.target_account_id,\n    });\n  }\n\n  handleFollow = () => {\n    store.dispatch(followAccount(this.state.target_account_id));\n    this.setState({ status: 'following' });\n  }\n\n  handleUnfollow = () => {\n    store.dispatch(unfollowAccount(this.state.target_account_id));\n    this.setState({ status: 'unfollow' });\n  }\n\n  render() {\n    const { locale } = this.props;\n    const status = this.state.status;\n\n    return (\n      <IntlProvider locale={locale} messages={messages}>\n        <Provider store={store}>\n          <Fragment>\n            <div className='account-action'>\n              {\n                status === 'unfollow' && (\n                  <div className='button normal-button' onClick={this.handleFollow} role='button' tabIndex={0} >Follow</div>\n                )\n              }\n              {\n                status === 'following' && (\n                  <div className='button normal-button button--destructive' onClick={this.handleUnfollow} role='button' tabIndex={0} >\n                    <span className='normal'>Following</span>\n                    <span className='hover'>Unfollow</span>\n                  </div>\n                )\n              }\n            </div>\n          </Fragment>\n        </Provider>\n      </IntlProvider>\n    );\n  }\n\n}\n","import React from 'react';\nimport IconButton from 'brighteon/components/icon_button';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\n\nconst messages = defineMessages({\n  upload: { id: 'upload_button.label', defaultMessage: 'Add images, a video or an audio file' },\n});\n\nconst makeMapStateToProps = () => {\n  const mapStateToProps = state => ({\n    acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']),\n  });\n\n  return mapStateToProps;\n};\n\nconst iconStyle = {\n  height: null,\n  lineHeight: '27px',\n};\n\nexport default @connect(makeMapStateToProps)\n@injectIntl\nclass UploadButton extends ImmutablePureComponent {\n\n  static propTypes = {\n    disabled: PropTypes.bool,\n    unavailable: PropTypes.bool,\n    onSelectFile: PropTypes.func.isRequired,\n    style: PropTypes.object,\n    resetFileKey: PropTypes.number,\n    acceptContentTypes: ImmutablePropTypes.listOf(PropTypes.string).isRequired,\n    intl: PropTypes.object.isRequired,\n    onFocus: PropTypes.func.isRequired,\n  };\n\n  handleChange = (e) => {\n    if (e.target.files.length > 0) {\n      this.props.onSelectFile(e.target.files);\n    }\n  }\n\n  handleClick = () => {\n    this.props.onFocus();\n    this.fileElement.click();\n  }\n\n  setRef = (c) => {\n    this.fileElement = c;\n  }\n\n  render() {\n    const { intl, resetFileKey, unavailable, disabled, acceptContentTypes } = this.props;\n\n    if (unavailable) {\n      return null;\n    }\n\n    const message = intl.formatMessage(messages.upload);\n\n    return (\n      <div className='compose-form__upload-button'>\n        <IconButton icon='paperclip' title={message} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} />\n        <label>\n          <span style={{ display: 'none' }}>{message}</span>\n          <input\n            key={resetFileKey}\n            ref={this.setRef}\n            type='file'\n            multiple\n            accept={acceptContentTypes.toArray().join(',')}\n            onChange={this.handleChange}\n            disabled={disabled}\n            style={{ display: 'none' }}\n          />\n        </label>\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport UploadButton from '../components/upload_button';\nimport { uploadCompose } from 'brighteon/actions/compose_in_reply';\n\nconst mapStateToProps = state => ({\n  disabled: state.getIn(['compose_in_reply', 'is_uploading']) || (state.getIn(['compose_in_reply', 'media_attachments']).size + state.getIn(['compose_in_reply', 'pending_media_attachments']) > 3 || state.getIn(['compose_in_reply', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')))),\n  unavailable: state.getIn(['compose_in_reply', 'poll']) !== null,\n  resetFileKey: state.getIn(['compose_in_reply', 'resetFileKey']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n  onSelectFile(files) {\n    dispatch(uploadCompose(files));\n  },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UploadButton);\n","import { connect } from 'react-redux';\nimport EmojiPickerDropdown from '../components/emoji_picker_dropdown';\nimport { changeSetting } from 'brighteon/actions/settings';\nimport { createSelector } from 'reselect';\nimport { Map as ImmutableMap } from 'immutable';\nimport { useEmoji } from 'brighteon/actions/emojis';\n\nconst perLine = 8;\nconst lines = 2;\n\nconst DEFAULTS = [\n  '+1',\n  'grinning',\n  'kissing_heart',\n  'heart_eyes',\n  'laughing',\n  'stuck_out_tongue_winking_eye',\n  'sweat_smile',\n  'joy',\n  'yum',\n  'disappointed',\n  'thinking_face',\n  'weary',\n  'sob',\n  'sunglasses',\n  'heart',\n  'ok_hand',\n];\n\nconst getFrequentlyUsedEmojis = createSelector([\n  state => state.getIn(['settings', 'frequentlyUsedEmojis'], ImmutableMap()),\n], emojiCounters => {\n  let emojis = emojiCounters\n    .keySeq()\n    .sort((a, b) => emojiCounters.get(a) - emojiCounters.get(b))\n    .reverse()\n    .slice(0, perLine * lines)\n    .toArray();\n\n  if (emojis.length < DEFAULTS.length) {\n    let uniqueDefaults = DEFAULTS.filter(emoji => !emojis.includes(emoji));\n    emojis = emojis.concat(uniqueDefaults.slice(0, DEFAULTS.length - emojis.length));\n  }\n\n  return emojis;\n});\n\nconst getCustomEmojis = createSelector([\n  state => state.get('custom_emojis'),\n], emojis => emojis.filter(e => e.get('visible_in_picker')).sort((a, b) => {\n  const aShort = a.get('shortcode').toLowerCase();\n  const bShort = b.get('shortcode').toLowerCase();\n\n  if (aShort < bShort) {\n    return -1;\n  } else if (aShort > bShort) {\n    return 1;\n  } else {\n    return 0;\n  }\n}));\n\nconst mapStateToProps = state => ({\n  custom_emojis: getCustomEmojis(state),\n  skinTone: state.getIn(['settings', 'skinTone']),\n  frequentlyUsedEmojis: getFrequentlyUsedEmojis(state),\n});\n\nconst mapDispatchToProps = (dispatch, { onPickEmoji }) => ({\n  onSkinTone: skinTone => {\n    dispatch(changeSetting(['skinTone'], skinTone));\n  },\n\n  onPickEmoji: emoji => {\n    dispatch(useEmoji(emoji));\n\n    if (onPickEmoji) {\n      onPickEmoji(emoji);\n    }\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EmojiPickerDropdown);\n","import { connect } from 'react-redux';\nimport UploadProgress from 'brighteon/features/compose/components/upload_progress';\n\nconst mapStateToProps = state => ({\n  active: state.getIn(['compose_in_reply', 'is_uploading']),\n  progress: state.getIn(['compose_in_reply', 'progress']),\n});\n\nexport default connect(mapStateToProps)(UploadProgress);\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Motion from 'brighteon/features/ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport Icon from 'brighteon/components/icon';\n\nexport default class Upload extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    media: ImmutablePropTypes.map.isRequired,\n    onUndo: PropTypes.func.isRequired,\n    onOpenFocalPoint: PropTypes.func.isRequired,\n  };\n\n  handleUndoClick = e => {\n    e.stopPropagation();\n    this.props.onUndo(this.props.media.get('id'));\n  }\n\n  handleFocalPointClick = e => {\n    e.stopPropagation();\n    this.props.onOpenFocalPoint(this.props.media.get('id'));\n  }\n\n  render() {\n    const { media } = this.props;\n    const focusX = media.getIn(['meta', 'focus', 'x']);\n    const focusY = media.getIn(['meta', 'focus', 'y']);\n    const x = ((focusX / 2) + .5) * 100;\n    const y = ((focusY / -2) + .5) * 100;\n\n    return (\n      <div className='compose-form__upload' tabIndex='0' role='button'>\n        <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}>\n          {({ scale }) => (\n            <div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}>\n              <div className={classNames('compose-form__upload__actions', { active: true })}>\n                <button className='icon-button' onClick={this.handleUndoClick}><Icon id='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button>\n                {/*<button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>*/}\n              </div>\n            </div>\n          )}\n        </Motion>\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport Upload from '../components/upload';\nimport { undoUploadCompose } from 'brighteon/actions/compose_in_reply';\nimport { openModal } from 'brighteon/actions/modal';\nimport { submitCompose } from 'brighteon/actions/compose_in_reply';\n\nconst mapStateToProps = (state, { id }) => ({\n  media: state.getIn(['compose_in_reply', 'media_attachments']).find(item => item.get('id') === id),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n  onUndo: id => {\n    dispatch(undoUploadCompose(id));\n  },\n\n  onOpenFocalPoint: id => {\n    dispatch(openModal('FOCAL_POINT', { id }));\n  },\n\n  onSubmit(router) {\n    dispatch(submitCompose(router));\n  },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Upload);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { changeComposeSensitivity } from 'brighteon/actions/compose_in_reply';\nimport { injectIntl, defineMessages, FormattedMessage } from 'react-intl';\n\nconst messages = defineMessages({\n  marked: { id: 'compose_form.sensitive.marked', defaultMessage: 'Media is marked as sensitive' },\n  unmarked: { id: 'compose_form.sensitive.unmarked', defaultMessage: 'Media is not marked as sensitive' },\n});\n\nconst mapStateToProps = state => ({\n  active: state.getIn(['compose_in_reply', 'sensitive']),\n  disabled: state.getIn(['compose_in_reply', 'spoiler']),\n  mediaCount: state.getIn(['compose', 'media_attachments']).size,\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n  onClick() {\n    dispatch(changeComposeSensitivity());\n  },\n\n});\n\nclass SensitiveButton extends React.PureComponent {\n\n  static propTypes = {\n    active: PropTypes.bool,\n    disabled: PropTypes.bool,\n    mediaCount: PropTypes.number,\n    onClick: PropTypes.func.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  render() {\n    const { active, disabled, mediaCount, onClick, intl } = this.props;\n\n    return (\n      <div className='compose-form__sensitive-button'>\n        <label className={classNames('icon-button', { active })} title={intl.formatMessage(active ? messages.marked : messages.unmarked)}>\n          <input\n            name='mark-sensitive'\n            type='checkbox'\n            checked={active}\n            onChange={onClick}\n            disabled={disabled}\n          />\n\n          <span className={classNames('checkbox', { active })} />\n\n          <FormattedMessage\n            id='compose_form.sensitive.hide'\n            defaultMessage='{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}'\n            values={{ count: mediaCount }}\n          />\n        </label>\n      </div>\n    );\n  }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(injectIntl(SensitiveButton));\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport UploadProgressContainer from './containers/upload_progress_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport UploadContainer from './containers/upload_container';\nimport SensitiveButtonContainer from './containers/sensitive_button_container';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class UploadForm extends ImmutablePureComponent {\n\n  static propTypes = {\n    mediaIds: ImmutablePropTypes.list.isRequired,\n  };\n\n  render () {\n    const { mediaIds } = this.props;\n\n    return (\n      <div className='compose-form__upload-wrapper'>\n        <UploadProgressContainer icon='upload' message={<FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />} />\n\n        <div className='compose-form__uploads-wrapper'>\n          {mediaIds.map(id => (\n            <UploadContainer id={id} key={id} />\n          ))}\n        </div>\n\n        {!mediaIds.isEmpty() && <SensitiveButtonContainer />}\n      </div>\n    );\n  }\n\n}\n","import UploadForm from './upload_form';\n\nexport default UploadForm;\n","import { connect } from 'react-redux';\nimport UploadForm from '../components/upload_form';\n\nconst mapStateToProps = state => ({\n  mediaIds: state.getIn(['compose_in_reply', 'media_attachments']).map(item => item.get('id')),\n});\n\nexport default connect(mapStateToProps)(UploadForm);\n","import React from 'react';\nimport classNames from 'classnames';\nimport CharacterCounter from 'brighteon/features/compose/components/character_counter';\nimport Button from 'brighteon/components/button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport AutosuggestTextarea from 'brighteon/components/autosuggest_textarea';\nimport UploadButtonContainer from '../containers/upload_button_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport EmojiPickerDropdown from '../containers/emoji_picker_dropdown_container';\nimport UploadFormContainer from '../containers/upload_form_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { length } from 'stringz';\nimport { countableText } from 'brighteon/features/compose/util/counter';\nimport Icon from 'brighteon/components/icon';\nimport { MAX_POST_CHARACTER_COUNT } from '../../../../../../constants';\n\nconst allowedAroundShortCode = '><\\u0085\\u0020\\u00a0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\u0009\\u000a\\u000b\\u000c\\u000d';\n\nconst messages = defineMessages({\n  placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' },\n  spoiler_placeholder: { id: 'compose_form.spoiler_placeholder', defaultMessage: 'Write your warning here' },\n  publish: { id: 'compose_form.publish', defaultMessage: 'Post' },\n  publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}' },\n});\n\nexport default @injectIntl\nclass ComposeForm extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    intl: PropTypes.object.isRequired,\n    text: PropTypes.string.isRequired,\n    suggestions: ImmutablePropTypes.list,\n    spoiler: PropTypes.bool,\n    privacy: PropTypes.string,\n    spoilerText: PropTypes.string,\n    focusDate: PropTypes.instanceOf(Date),\n    caretPosition: PropTypes.number,\n    preselectDate: PropTypes.instanceOf(Date),\n    isSubmitting: PropTypes.bool,\n    isChangingUpload: PropTypes.bool,\n    isUploading: PropTypes.bool,\n    onChange: PropTypes.func.isRequired,\n    onSubmit: PropTypes.func.isRequired,\n    onClearSuggestions: PropTypes.func.isRequired,\n    onFetchSuggestions: PropTypes.func.isRequired,\n    onSuggestionSelected: PropTypes.func.isRequired,\n    onChangeSpoilerText: PropTypes.func.isRequired,\n    onPaste: PropTypes.func.isRequired,\n    onPickEmoji: PropTypes.func.isRequired,\n    closeComposeModal: PropTypes.func.isRequired,\n    showSearch: PropTypes.bool,\n    anyMedia: PropTypes.bool,\n    inReplyTo: PropTypes.any,\n    singleColumn: PropTypes.bool,\n    ancestor: ImmutablePropTypes.map.isRequired,\n    replyCompose: PropTypes.func.isRequired,\n    getReplies: PropTypes.func.isRequired,\n  };\n\n  static defaultProps = {\n    showSearch: false,\n  };\n\n  state = {\n    jumping: false,\n  }\n\n  handleChange = (e) => {\n    // this.props.onChange(e.target.value);\n    if (!this.props.inReplyTo) {\n      this.props.replyCompose(this.props.ancestor);\n    }\n    if (this.props.inReplyTo === this.props.ancestor.get('id')) {\n      this.props.onChange(e.target.value);\n    }\n  }\n\n  handleKeyDown = (e) => {\n    if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {\n      this.handleSubmit();\n    }\n  }\n\n  handleSubmit = () => {\n    if (this.props.text !== this.autosuggestTextarea.textarea.value) {\n      // Something changed the text inside the textarea (e.g. browser extensions like Grammarly)\n      // Update the state to match the current text\n      this.props.onChange(this.autosuggestTextarea.textarea.value);\n    }\n\n    // Submit disabled:\n    const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props;\n    const fulltext = [this.props.spoilerText, countableText(this.props.text)].join('');\n\n    if (isSubmitting || isUploading || isChangingUpload || length(fulltext) > MAX_POST_CHARACTER_COUNT || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) {\n      return;\n    }\n\n    this.props.closeComposeModal(); // for only account card dropdown actions and profile page dropdown actions\n    this.jumpSubmitButton();\n    this.props.onSubmit(this.context.router ? this.context.router.history : null);\n  }\n\n  jumpSubmitButton = () => {\n    this.setState({\n      jumping: true,\n    });\n    setTimeout(() => {\n      this.setState({\n        jumping: false,\n      });\n    }, 2000);\n  }\n\n  onSuggestionsClearRequested = () => {\n    this.props.onClearSuggestions();\n  }\n\n  onSuggestionsFetchRequested = (token) => {\n    this.props.onFetchSuggestions(token);\n  }\n\n  onSuggestionSelected = (tokenStart, token, value) => {\n    this.props.onSuggestionSelected(tokenStart, token, value, ['text']);\n  }\n\n  onSpoilerSuggestionSelected = (tokenStart, token, value) => {\n    this.props.onSuggestionSelected(tokenStart, token, value, ['spoiler_text']);\n  }\n\n  handleChangeSpoilerText = (e) => {\n    this.props.onChangeSpoilerText(e.target.value);\n  }\n\n  handleFocus = () => {\n    if (this.composeForm) {\n      this.composeForm.scrollIntoView({\n        behavior: 'smooth',\n        block: 'center',\n      });\n    }\n    if (this.props.inReplyTo !== this.props.ancestor.get('id')) {\n      this.props.replyCompose(this.props.ancestor);\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    // This statement does several things:\n    // - If we're beginning a reply, and,\n    //     - Replying to zero or one users, places the cursor at the end of the textbox.\n    //     - Replying to more than one user, selects any usernames past the first;\n    //       this provides a convenient shortcut to drop everyone else from the conversation.\n    // if (this.props.focusDate !== prevProps.focusDate) {\n    //   let selectionEnd, selectionStart;\n    //\n    //   if (this.props.preselectDate !== prevProps.preselectDate) {\n    //     selectionEnd   = this.props.text.length;\n    //     selectionStart = this.props.text.search(/\\s/) + 1;\n    //   } else if (typeof this.props.caretPosition === 'number') {\n    //     selectionStart = this.props.caretPosition;\n    //     selectionEnd   = this.props.caretPosition;\n    //   } else {\n    //     selectionEnd   = this.props.text.length;\n    //     selectionStart = selectionEnd;\n    //   }\n    //\n    //   this.autosuggestTextarea.textarea.setSelectionRange(selectionStart, selectionEnd);\n    //   this.autosuggestTextarea.textarea.focus();\n    // } else if(prevProps.isSubmitting && !this.props.isSubmitting) {\n    //   this.autosuggestTextarea.textarea.focus();\n    // } else if (this.props.spoiler !== prevProps.spoiler) {\n    //   if (this.props.spoiler) {\n    //     this.spoilerText.input.focus();\n    //   } else {\n    //     this.autosuggestTextarea.textarea.focus();\n    //   }\n    // }\n    if (prevProps.isSubmitting && !this.props.isSubmitting) {\n      this.props.getReplies();\n    }\n  }\n\n  setAutosuggestTextarea = (c) => {\n    this.autosuggestTextarea = c;\n    if (this.props.passRefCb) {\n      this.props.passRefCb(c);\n    }\n  }\n\n  setSpoilerText = (c) => {\n    this.spoilerText = c;\n  }\n\n  setRef = c => {\n    this.composeForm = c;\n  };\n\n  handleEmojiPick = (data) => {\n    const { text } = this.props;\n    const position = this.autosuggestTextarea.textarea.selectionStart;\n    const needsSpace = data.custom && position > 0 && !allowedAroundShortCode.includes(text[position - 1]);\n\n    this.props.onPickEmoji(position, data, needsSpace);\n  }\n\n  render() {\n    const { intl, onPaste, anyMedia } = this.props;\n    const { jumping } = this.state;\n    const disabled = this.props.isSubmitting;\n    const text = [this.props.spoilerText, countableText(this.props.text)].join('');\n    const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > MAX_POST_CHARACTER_COUNT || (text.length !== 0 && text.trim().length === 0 && !anyMedia);\n    let publishText = '';\n\n    if (this.props.privacy === 'private' || this.props.privacy === 'direct') {\n      publishText = <span className='compose-form__publish-private'><Icon id='lock' /> {intl.formatMessage(messages.publish)}</span>;\n    } else {\n      publishText = this.props.privacy !== 'unlisted' ? intl.formatMessage(messages.publishLoud, { publish: intl.formatMessage(messages.publish) }) : intl.formatMessage(messages.publish);\n    }\n\n    return (\n      <div className='compose-form' ref={this.setRef}>\n\n        <AutosuggestTextarea\n          ref={this.setAutosuggestTextarea}\n          placeholder='Write a reply'\n          disabled={disabled}\n          value={(this.props.inReplyTo === this.props.ancestor.get('id')) ? this.props.text : ''}\n          onChange={this.handleChange}\n          suggestions={this.props.suggestions}\n          onFocus={this.handleFocus}\n          onKeyDown={this.handleKeyDown}\n          onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}\n          onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n          onSuggestionSelected={this.onSuggestionSelected}\n          onPaste={onPaste}\n          autoFocus={false}\n        >\n          <EmojiPickerDropdown\n            onPickEmoji={this.handleEmojiPick}\n            onFocus={this.handleFocus}\n          />\n          <div className='compose-form__modifiers'>\n            {\n              this.props.inReplyTo === this.props.ancestor.get('id') && (\n                <UploadFormContainer />\n              )\n            }\n          </div>\n        </AutosuggestTextarea>\n\n        <div className='compose-form__buttons-wrapper'>\n          <div className='compose-form__buttons'>\n            <UploadButtonContainer\n              onFocus={this.handleFocus}\n            />\n          </div>\n          <div className='character-counter__wrapper'><CharacterCounter max={MAX_POST_CHARACTER_COUNT} text={text} /></div>\n        </div>\n\n        <div className='compose-form__publish'>\n          <div className='compose-form__publish-button-wrapper'><Button className={classNames({ jumping })} text={publishText} onClick={this.handleSubmit} disabled={disabledButton} block /></div>\n        </div>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport IconButton from 'brighteon/components/icon_button';\nimport DropdownMenuContainer from 'brighteon/containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { me, isStaff } from 'brighteon/initial_state';\nimport classNames from 'classnames';\nimport { changeShowPrivacy } from 'brighteon/actions/compose';\nimport AccountTip from '../../../../../../components/account_tip_container';\n\nconst messages = defineMessages({\n  delete: { id: 'status.delete', defaultMessage: 'Delete' },\n  redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n  edit: { id: 'status.edit', defaultMessage: 'Edit' },\n  direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },\n  mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n  mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },\n  block: { id: 'account.block', defaultMessage: 'Block @{name}' },\n  reply: { id: 'status.reply', defaultMessage: 'Reply' },\n  share: { id: 'status.share', defaultMessage: 'Share' },\n  more: { id: 'status.more', defaultMessage: 'More' },\n  replyAll: { id: 'status.replyAll', defaultMessage: 'Reply to thread' },\n  reblog: { id: 'status.reblog', defaultMessage: 'Repost' },\n  reblog_private: { id: 'status.reblog_private', defaultMessage: 'Repost original audience' },\n  cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unrepost' },\n  cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be reposted' },\n  favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n  bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n  removeBookmark: { id: 'status.remove_bookmark', defaultMessage: 'Remove bookmark' },\n  open: { id: 'status.open', defaultMessage: 'Expand this status' },\n  report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n  muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n  unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n  pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },\n  unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' },\n  embed: { id: 'status.embed', defaultMessage: 'Embed' },\n  admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },\n  admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' },\n  copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },\n  blockDomain: { id: 'account.block_domain', defaultMessage: 'Block domain {domain}' },\n  unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' },\n  unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },\n  unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },\n});\n\nconst mapStateToProps = (state, { status }) => ({\n  relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),\n  cryptoWallets: state.getIn(['crypto_wallets', status.getIn(['account', 'id'])]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass StatusActionBar extends ImmutablePureComponent {\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,\n    onFavourite: PropTypes.func,\n    onReblog: PropTypes.func,\n    onDelete: PropTypes.func,\n    onEdit: PropTypes.func,\n    onDirect: PropTypes.func,\n    onMention: PropTypes.func,\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    onReport: PropTypes.func,\n    onEmbed: PropTypes.func,\n    onMuteConversation: PropTypes.func,\n    onPin: PropTypes.func,\n    onBookmark: PropTypes.func,\n    withDismiss: PropTypes.bool,\n    scrollKey: PropTypes.string,\n    intl: PropTypes.object.isRequired,\n    showAllReplies: PropTypes.any,\n    toggleShowAllReplies: PropTypes.func,\n    onOpenRepliesModal: PropTypes.func.isRequired,\n    onOpenReblogsModal: PropTypes.func.isRequired,\n    onOpenFavouritesModal: PropTypes.func.isRequired,\n    account: ImmutablePropTypes.map,\n  };\n\n  // Avoid checking props that are functions (and whose equality will always\n  // evaluate to false. See react-immutable-pure-component for usage.\n  updateOnProps = [\n    'status',\n    'relationship',\n    'withDismiss',\n  ]\n\n  handleReplyClick = () => {\n    if (me) {\n      // this.props.onReply(this.props.status, this.context.router.history);\n      this.props.onReply(this.props.status, null);\n    } else {\n      this._openInteractionDialog('reply');\n    }\n  }\n\n  handleShareClick = () => {\n    navigator.share({\n      text: this.props.status.get('search_index'),\n      url: this.props.status.get('url'),\n    }).catch((e) => {\n      if (e.name !== 'AbortError') console.error(e);\n    });\n  }\n\n  handleFavouriteClick = () => {\n    if (me) {\n      this.props.onFavourite(this.props.status);\n    } else {\n      this._openInteractionDialog('favourite');\n    }\n  }\n\n  handleReblogClick = e => {\n    if (me) {\n      this.props.onReblog(this.props.status, e);\n    } else {\n      this._openInteractionDialog('reblog');\n    }\n  }\n\n  _openInteractionDialog = type => {\n    window.open(`/interact/${this.props.status.get('id')}?type=${type}`, 'brighteon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n  }\n\n  handleBookmarkClick = () => {\n    this.props.onBookmark(this.props.status);\n  }\n\n  handleDeleteClick = () => {\n    this.props.onDelete(this.props.status);\n  }\n\n  handleRedraftClick = () => {\n    this.props.onDelete(this.props.status, true);\n  }\n\n  handleEditClick = () => {\n    this.props.onEdit(this.props.status);\n  }\n\n  handlePinClick = () => {\n    this.props.onPin(this.props.status);\n  }\n\n  handleMentionClick = () => {\n    this.props.openComposeModal();\n    this.props.dispatch(changeShowPrivacy(true));\n    this.props.onMention(this.props.account, null);\n    // this.props.onMention(this.props.status.get('account'), this.context.router.history);\n  }\n\n  handleDirectClick = () => {\n    window.location.href = '/@' + this.props.account.get('username') + '/chat';\n  }\n\n  handleMuteClick = () => {\n    const { relationship, onMute, onUnmute, account } = this.props;\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, account } = this.props;\n\n    if (relationship && relationship.get('blocking')) {\n      onUnblock(account);\n    } else {\n      onBlock(status);\n    }\n  }\n\n  handleBlockDomain = () => {\n    const { onBlockDomain, account } = this.props;\n\n    onBlockDomain(account.get('acct').split('@')[1]);\n  }\n\n  handleUnblockDomain = () => {\n    const { onUnblockDomain, account } = this.props;\n\n    onUnblockDomain(account.get('acct').split('@')[1]);\n  }\n\n  handleOpen = () => {\n    window.location = this.props.status.get('url');\n  }\n\n  handleEmbed = () => {\n    this.props.onEmbed(this.props.status);\n  }\n\n  handleReport = () => {\n    this.props.onReport(this.props.status);\n  }\n\n  handleConversationMuteClick = () => {\n    this.props.onMuteConversation(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  toggleShowAllReplies = () => {\n    this.props.toggleShowAllReplies();\n  }\n\n  handleOpenRepliesModal = () => {\n    const { status } = this.props;\n    const count = status.get('replies_count');\n    if (count > 0) {\n      this.props.onOpenRepliesModal(status);\n    }\n  }\n\n  handleOpenReblogsModal = () => {\n    const { status } = this.props;\n    const count = status.get('reblogs_count');\n    if (count > 0) {\n      this.props.onOpenReblogsModal(status);\n    }\n  }\n\n  handleOpenFavouritesModal = () => {\n    const { status } = this.props;\n    const count = status.get('favourites_count');\n    if (count > 0) {\n      this.props.onOpenFavouritesModal(status);\n    }\n  }\n\n  handleShareStatus = () => {\n    const { status } = this.props;\n    this.props.onShareStatus(status);\n  }\n\n  render() {\n    const { status, relationship, intl, withDismiss, scrollKey, account, cryptoWallets } = this.props;\n\n    const mutingConversation = status.get('muted');\n    const anonymousAccess = !me;\n    const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n\n    let menu = [];\n\n    menu.push({ text: intl.formatMessage(messages.open), action: this.handleOpen });\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    }\n\n    menu.push({ text: intl.formatMessage(status.get('bookmarked') ? messages.removeBookmark : messages.bookmark), action: this.handleBookmarkClick });\n    menu.push(null);\n\n    menu.push({ text: 'Show all or only 3 replies', action: this.toggleShowAllReplies });\n    menu.push(null);\n\n    menu.push({ text: 'Share via Direct Message', action: this.handleShareStatus });\n    menu.push(null);\n\n    if (status.getIn(['account', 'id']) === me || withDismiss) {\n      menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });\n      menu.push(null);\n    }\n\n    if (status.getIn(['account', 'id']) === me) {\n      if (publicStatus) {\n        menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n      }\n\n      menu.push({ text: intl.formatMessage(messages.edit), action: this.handleEditClick });\n      menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });\n      menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });\n    } else {\n      if (account) {\n        menu.push({ text: intl.formatMessage(messages.mention, { name: account.get('username') }), action: this.handleMentionClick });\n        menu.push({ text: intl.formatMessage(messages.direct, { name: account.get('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: account.get('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: account.get('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\n    let replyIcon;\n    let replyTitle;\n    if (status.get('in_reply_to_id', null) === null) {\n      replyIcon = 'reply';\n      replyTitle = intl.formatMessage(messages.reply);\n    } else {\n      replyIcon = 'reply-all';\n      replyTitle = intl.formatMessage(messages.replyAll);\n    }\n\n    const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';\n\n    let reblogTitle = '';\n    if (status.get('reblogged')) {\n      reblogTitle = intl.formatMessage(messages.cancel_reblog_private);\n    } else if (publicStatus) {\n      reblogTitle = intl.formatMessage(messages.reblog);\n    } else if (reblogPrivate) {\n      reblogTitle = intl.formatMessage(messages.reblog_private);\n    } else {\n      reblogTitle = intl.formatMessage(messages.cannot_reblog);\n    }\n\n    return (\n      <div className='status__action-bar d-flex justify-content-space-between'>\n        <div className='status__action-left d-flex'>\n          <div className='status__action-bar__counter'>\n            <IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} />\n            <span className='status__action-bar__counter__label' onClick={this.handleOpenRepliesModal} role='button' tabIndex={0} >{status.get('replies_count')} Replies</span>\n          </div>\n          <div className='status__action-bar__counter'>\n            <IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} />\n            <span className='status__action-bar__counter__label' onClick={this.handleOpenReblogsModal} role='button' tabIndex={0} >{status.get('reblogs_count')} Reposts</span>\n          </div>\n          <div className='status__action-bar__counter'>\n            <IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} />\n            <span className='status__action-bar__counter__label' onClick={this.handleOpenFavouritesModal} role='button' tabIndex={0} >{status.get('favourites_count')} Favorites</span>\n          </div>\n\n          <div className='status__action-bar-dropdown'>\n            <DropdownMenuContainer\n              scrollKey={scrollKey}\n              disabled={anonymousAccess}\n              status={status}\n              items={menu}\n              icon='ellipsis-h'\n              size={18}\n              direction='right'\n              title={intl.formatMessage(messages.more)}\n            />\n          </div>\n        </div>\n        <div className='status__action-right'>\n          { cryptoWallets && cryptoWallets.length > 0 && <AccountTip accountId={account.get('id')} accountName={account.get('username')} /> }\n        </div>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport IconButton from 'brighteon/components/icon_button';\nimport DropdownMenuContainer from 'brighteon/containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { me, isStaff } from 'brighteon/initial_state';\nimport classNames from 'classnames';\nimport { changeShowPrivacy } from 'brighteon/actions/compose';\n\nconst messages = defineMessages({\n  delete: { id: 'status.delete', defaultMessage: 'Delete' },\n  redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n  edit: { id: 'status.edit', defaultMessage: 'Edit' },\n  direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },\n  mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n  mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },\n  block: { id: 'account.block', defaultMessage: 'Block @{name}' },\n  reply: { id: 'status.reply', defaultMessage: 'Reply' },\n  share: { id: 'status.share', defaultMessage: 'Share' },\n  more: { id: 'status.more', defaultMessage: 'More' },\n  replyAll: { id: 'status.replyAll', defaultMessage: 'Reply to thread' },\n  reblog: { id: 'status.reblog', defaultMessage: 'Repost' },\n  reblog_private: { id: 'status.reblog_private', defaultMessage: 'Repost original audience' },\n  cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unrepost' },\n  cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be reposted' },\n  favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n  bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n  removeBookmark: { id: 'status.remove_bookmark', defaultMessage: 'Remove bookmark' },\n  open: { id: 'status.open', defaultMessage: 'Expand this status' },\n  report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n  muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n  unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n  pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },\n  unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' },\n  embed: { id: 'status.embed', defaultMessage: 'Embed' },\n  admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },\n  admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' },\n  copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },\n  blockDomain: { id: 'account.block_domain', defaultMessage: 'Block domain {domain}' },\n  unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' },\n  unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },\n  unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },\n});\n\nconst mapStateToProps = (state, { status }) => ({\n  relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass StatusActionBar extends ImmutablePureComponent {\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,\n    onFavourite: PropTypes.func,\n    onReblog: PropTypes.func,\n    onDelete: PropTypes.func,\n    onEdit: PropTypes.func,\n    onDirect: PropTypes.func,\n    onMention: PropTypes.func,\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    onReport: PropTypes.func,\n    onEmbed: PropTypes.func,\n    onMuteConversation: PropTypes.func,\n    onPin: PropTypes.func,\n    onBookmark: PropTypes.func,\n    withDismiss: PropTypes.bool,\n    scrollKey: PropTypes.string,\n    intl: PropTypes.object.isRequired,\n    showAllReplies: PropTypes.any,\n    onOpenRepliesModal: PropTypes.func.isRequired,\n    onOpenReblogsModal: PropTypes.func.isRequired,\n    onOpenFavouritesModal: PropTypes.func.isRequired,\n  };\n\n  // Avoid checking props that are functions (and whose equality will always\n  // evaluate to false. See react-immutable-pure-component for usage.\n  updateOnProps = [\n    'status',\n    'relationship',\n    'withDismiss',\n  ]\n\n  handleReplyClick = () => {\n    if (me) {\n      // this.props.onReply(this.props.status, this.context.router.history);\n      this.props.onReply(this.props.status, null);\n    } else {\n      this._openInteractionDialog('reply');\n    }\n  }\n\n  handleShareClick = () => {\n    navigator.share({\n      text: this.props.status.get('search_index'),\n      url: this.props.status.get('url'),\n    }).catch((e) => {\n      if (e.name !== 'AbortError') console.error(e);\n    });\n  }\n\n  handleFavouriteClick = () => {\n    if (me) {\n      this.props.onFavourite(this.props.status);\n    } else {\n      this._openInteractionDialog('favourite');\n    }\n  }\n\n  handleReblogClick = e => {\n    if (me) {\n      this.props.onReblog(this.props.status, e);\n    } else {\n      this._openInteractionDialog('reblog');\n    }\n  }\n\n  _openInteractionDialog = type => {\n    window.open(`/interact/${this.props.status.get('id')}?type=${type}`, 'brighteon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n  }\n\n  handleBookmarkClick = () => {\n    this.props.onBookmark(this.props.status);\n  }\n\n  handleDeleteClick = () => {\n    this.props.onDelete(this.props.status);\n  }\n\n  handleRedraftClick = () => {\n    this.props.onDelete(this.props.status, true);\n  }\n\n  handleEditClick = () => {\n    this.props.onEdit(this.props.status);\n  }\n\n  handlePinClick = () => {\n    this.props.onPin(this.props.status);\n  }\n\n  handleMentionClick = () => {\n    // this.props.onMention(this.props.status.get('account'), this.context.router.history);\n    this.props.openComposeModal();\n    this.props.dispatch(changeShowPrivacy(true));\n    this.props.onMention(this.props.status.get('account'), null);\n  }\n\n  handleDirectClick = () => {\n    window.location.href = '/@' + this.props.status.get('account').get('username') + '/chat';\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  handleOpen = () => {\n    // this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);\n    window.location = `${window.location.href}/${this.props.status.get('id')}`;\n  }\n\n  handleEmbed = () => {\n    this.props.onEmbed(this.props.status);\n  }\n\n  handleReport = () => {\n    this.props.onReport(this.props.status);\n  }\n\n  handleConversationMuteClick = () => {\n    this.props.onMuteConversation(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  handleOpenRepliesModal = () => {\n    const { status } = this.props;\n    const count = status.get('replies_count');\n    if (count > 0) {\n      this.props.onOpenRepliesModal(status);\n    }\n  }\n\n  handleOpenReblogsModal = () => {\n    const { status } = this.props;\n    const count = status.get('reblogs_count');\n    if (count > 0) {\n      this.props.onOpenReblogsModal(status);\n    }\n  }\n\n  handleOpenFavouritesModal = () => {\n    const { status } = this.props;\n    const count = status.get('favourites_count');\n    if (count > 0) {\n      this.props.onOpenFavouritesModal(status);\n    }\n  }\n\n  render() {\n    const { status, relationship, intl, scrollKey } = this.props;\n\n    const anonymousAccess = !me;\n    const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n    const account = status.get('account');\n\n    let menu = [];\n\n    // menu.push({ text: intl.formatMessage(messages.open), action: this.handleOpen });\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    }\n    //\n    menu.push({ text: intl.formatMessage(status.get('bookmarked') ? messages.removeBookmark : messages.bookmark), action: this.handleBookmarkClick });\n    menu.push(null);\n    //\n    // if (status.getIn(['account', 'id']) === me || withDismiss) {\n    //   menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });\n    //   menu.push(null);\n    // }\n\n    if (status.getIn(['account', 'id']) === me) {\n      if (publicStatus) {\n        menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n      }\n\n      menu.push({ text: intl.formatMessage(messages.edit), action: this.handleEditClick });\n      menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });\n      menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });\n    } else {\n      menu.push({ text: intl.formatMessage(messages.mention, { name: account.get('username') }), action: this.handleMentionClick });\n      menu.push({ text: intl.formatMessage(messages.direct, { name: account.get('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: account.get('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: account.get('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    let replyIcon;\n    let replyTitle;\n    if (status.get('in_reply_to_id', null) === null) {\n      replyIcon = 'reply';\n      replyTitle = intl.formatMessage(messages.reply);\n    } else {\n      replyIcon = 'reply-all';\n      replyTitle = intl.formatMessage(messages.replyAll);\n    }\n\n    const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';\n\n    let reblogTitle = '';\n    if (status.get('reblogged')) {\n      reblogTitle = intl.formatMessage(messages.cancel_reblog_private);\n    } else if (publicStatus) {\n      reblogTitle = intl.formatMessage(messages.reblog);\n    } else if (reblogPrivate) {\n      reblogTitle = intl.formatMessage(messages.reblog_private);\n    } else {\n      reblogTitle = intl.formatMessage(messages.cannot_reblog);\n    }\n\n    return (\n      <div className='status__action-bar'>\n        <div className='status__action-bar__counter'>\n          <IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} />\n          <span className='status__action-bar__counter__label' onClick={this.handleOpenRepliesModal} role='button' tabIndex={0} >{status.get('replies_count')} Replies</span>\n        </div>\n        <div className='status__action-bar__counter'>\n          <IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} />\n          <span className='status__action-bar__counter__label' onClick={this.handleOpenReblogsModal} role='button' tabIndex={0} >{status.get('reblogs_count')} Reposts</span>\n        </div>\n        <div className='status__action-bar__counter'>\n          <IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} />\n          <span className='status__action-bar__counter__label' onClick={this.handleOpenFavouritesModal} role='button' tabIndex={0} >{status.get('favourites_count')} Favorites</span>\n        </div>\n\n        <div className='status__action-bar-dropdown'>\n          <DropdownMenuContainer\n            scrollKey={scrollKey}\n            disabled={anonymousAccess}\n            status={status}\n            items={menu}\n            icon='ellipsis-h'\n            size={18}\n            direction='right'\n            title={intl.formatMessage(messages.more)}\n          />\n        </div>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Avatar from 'brighteon/components/avatar';\nimport RelativeTimestamp from 'brighteon/components/relative_timestamp';\nimport DisplayName from 'brighteon/components/display_name';\nimport StatusContent from 'brighteon/components/status_content';\nimport AttachmentList from 'brighteon/components/attachment_list';\nimport Card from 'brighteon/features/status/components/card';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { MediaGallery, Video, Audio } from 'brighteon/features/ui/util/async-components';\nimport { HotKeys } from 'react-hotkeys';\nimport classNames from 'classnames';\nimport Icon from 'brighteon/components/icon';\nimport { displayMedia } from 'brighteon/initial_state';\n\n// We use the component (and not the container) since we do not want\n// to use the progress bar to show download progress\nimport Bundle from 'brighteon/features/ui/components/bundle';\nimport { StatusActionBar } from './components';\n\nexport const textForScreenReader = (intl, status, rebloggedByText = false) => {\n  const displayName = status.getIn(['account', 'display_name']);\n\n  const values = [\n    displayName.length === 0 ? status.getIn(['account', 'acct']).split('@')[0] : displayName,\n    status.get('spoiler_text') && status.get('hidden') ? status.get('spoiler_text') : status.get('search_index').slice(status.get('spoiler_text').length),\n    intl.formatDate(status.get('created_at'), { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }),\n    status.getIn(['account', 'acct']),\n  ];\n\n  if (rebloggedByText) {\n    values.push(rebloggedByText);\n  }\n\n  return values.join(', ');\n};\n\nexport const defaultMediaVisibility = (status) => {\n  if (!status) {\n    return undefined;\n  }\n\n  if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n    status = status.get('reblog');\n  }\n\n  return (displayMedia !== 'hide_all' && !status.get('sensitive') || displayMedia === 'show_all');\n};\n\nexport default @injectIntl\nclass StatusReply extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    status: ImmutablePropTypes.map,\n    account: ImmutablePropTypes.map,\n    otherAccounts: ImmutablePropTypes.list,\n    onClick: PropTypes.func,\n    onReply: PropTypes.func,\n    onFavourite: PropTypes.func,\n    onReblog: PropTypes.func,\n    onDelete: PropTypes.func,\n    onDirect: PropTypes.func,\n    onMention: PropTypes.func,\n    onPin: PropTypes.func,\n    onOpenMedia: PropTypes.func,\n    onOpenVideo: PropTypes.func,\n    onBlock: PropTypes.func,\n    onEmbed: PropTypes.func,\n    onHeightChange: PropTypes.func,\n    onToggleHidden: PropTypes.func,\n    onToggleCollapsed: PropTypes.func,\n    muted: PropTypes.bool,\n    hidden: PropTypes.bool,\n    unread: PropTypes.bool,\n    onMoveUp: PropTypes.func,\n    onMoveDown: PropTypes.func,\n    showThread: PropTypes.bool,\n    getScrollPosition: PropTypes.func,\n    updateScrollBottom: PropTypes.func,\n    cacheMediaWidth: PropTypes.func,\n    cachedMediaWidth: PropTypes.number,\n    scrollKey: PropTypes.string,\n    onOpenRepliesModal: PropTypes.func,\n    onOpenReblogsModal: PropTypes.func,\n    onOpenFavouritesModal: PropTypes.func,\n  };\n\n  // Avoid checking props that are functions (and whose equality will always\n  // evaluate to false. See react-immutable-pure-component for usage.\n  updateOnProps = [\n    'status',\n    'account',\n    'muted',\n    'hidden',\n  ];\n\n  state = {\n    showMedia: defaultMediaVisibility(this.props.status),\n    statusId: undefined,\n  };\n\n  static getDerivedStateFromProps(nextProps, prevState) {\n    if (nextProps.status && nextProps.status.get('id') !== prevState.statusId) {\n      return {\n        showMedia: defaultMediaVisibility(nextProps.status),\n        statusId: nextProps.status.get('id'),\n      };\n    } else {\n      return null;\n    }\n  }\n\n  handleToggleMediaVisibility = () => {\n    this.setState({ showMedia: !this.state.showMedia });\n  }\n\n  handleClick = () => {\n    if (this.props.onClick) {\n      this.props.onClick();\n      return;\n    }\n\n    const { status } = this.props;\n    window.open(status.get('url'), '_blank');\n  }\n\n  handleExpandClick = (e) => {\n    if (this.props.onClick) {\n      this.props.onClick();\n      return;\n    }\n\n    if (e.button === 0) {\n      if (!this.context.router) {\n        return;\n      }\n\n      const { status } = this.props;\n      this.context.router.history.push(`/statuses/${status.getIn(['reblog', 'id'], status.get('id'))}`);\n    }\n  }\n\n  handleAccountClick = (e) => {\n    if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n      const id = e.currentTarget.getAttribute('data-id');\n      e.preventDefault();\n      this.context.router.history.push(`/accounts/${id}`);\n    }\n  }\n\n  handleExpandedToggle = () => {\n    this.props.onToggleHidden(this._properStatus());\n  }\n\n  handleCollapsedToggle = isCollapsed => {\n    this.props.onToggleCollapsed(this._properStatus(), isCollapsed);\n  }\n\n  renderLoadingMediaGallery() {\n    return <div className='media-gallery' style={{ height: '110px' }} />;\n  }\n\n  renderLoadingVideoPlayer() {\n    return <div className='video-player' style={{ height: '110px' }} />;\n  }\n\n  renderLoadingAudioPlayer() {\n    return <div className='audio-player' style={{ height: '110px' }} />;\n  }\n\n  handleOpenVideo = (media, options) => {\n    this.props.onOpenVideo(media, options);\n  }\n\n  handleHotkeyOpenMedia = e => {\n    const { onOpenMedia, onOpenVideo } = this.props;\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        onOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });\n      } else {\n        onOpenMedia(status.get('media_attachments'), 0);\n      }\n    }\n  }\n\n  handleHotkeyReply = e => {\n    e.preventDefault();\n    this.props.onReply(this._properStatus(), this.context.router.history);\n  }\n\n  handleHotkeyFavourite = () => {\n    this.props.onFavourite(this._properStatus());\n  }\n\n  handleHotkeyBoost = e => {\n    this.props.onReblog(this._properStatus(), e);\n  }\n\n  handleHotkeyMention = e => {\n    e.preventDefault();\n    this.props.onMention(this._properStatus().get('account'), this.context.router.history);\n  }\n\n  handleHotkeyOpen = () => {\n    this.context.router.history.push(`/statuses/${this._properStatus().get('id')}`);\n  }\n\n  handleHotkeyOpenProfile = () => {\n    this.context.router.history.push(`/accounts/${this._properStatus().getIn(['account', 'id'])}`);\n  }\n\n  handleHotkeyMoveUp = e => {\n    this.props.onMoveUp(this.props.status.get('id'), e.target.getAttribute('data-featured'));\n  }\n\n  handleHotkeyMoveDown = e => {\n    this.props.onMoveDown(this.props.status.get('id'), e.target.getAttribute('data-featured'));\n  }\n\n  handleHotkeyToggleHidden = () => {\n    this.props.onToggleHidden(this._properStatus());\n  }\n\n  handleHotkeyToggleSensitive = () => {\n    this.handleToggleMediaVisibility();\n  }\n\n  _properStatus() {\n    const { status } = this.props;\n\n    if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n      return status.get('reblog');\n    } else {\n      return status;\n    }\n  }\n\n  handleRef = c => {\n    this.node = c;\n  }\n\n  render() {\n    let media = null;\n    let statusAvatar, prepend, rebloggedByText;\n\n    const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey } = this.props;\n\n    let { status, account, ...other } = this.props;\n\n    if (status === null) {\n      return null;\n    }\n\n    const handlers = this.props.muted ? {} : {\n      reply: this.handleHotkeyReply,\n      favourite: this.handleHotkeyFavourite,\n      boost: this.handleHotkeyBoost,\n      mention: this.handleHotkeyMention,\n      open: this.handleHotkeyOpen,\n      openProfile: this.handleHotkeyOpenProfile,\n      moveUp: this.handleHotkeyMoveUp,\n      moveDown: this.handleHotkeyMoveDown,\n      toggleHidden: this.handleHotkeyToggleHidden,\n      toggleSensitive: this.handleHotkeyToggleSensitive,\n      openMedia: this.handleHotkeyOpenMedia,\n    };\n\n    if (hidden) {\n      return (\n        <HotKeys handlers={handlers}>\n          <div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex='0'>\n            {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}\n            {status.get('content')}\n          </div>\n        </HotKeys>\n      );\n    }\n\n    if (status.get('filtered') || status.getIn(['reblog', 'filtered'])) {\n      const minHandlers = this.props.muted ? {} : {\n        moveUp: this.handleHotkeyMoveUp,\n        moveDown: this.handleHotkeyMoveDown,\n      };\n\n      return (\n        <HotKeys handlers={minHandlers}>\n          <div className='status__wrapper status__wrapper--filtered focusable' tabIndex='0' ref={this.handleRef}>\n            <FormattedMessage id='status.filtered' defaultMessage='Filtered' />\n          </div>\n        </HotKeys>\n      );\n    }\n\n    if (featured) {\n      prepend = (\n        <div className='status__prepend'>\n          <div className='status__prepend-icon-wrapper'><Icon id='thumb-tack' className='status__prepend-icon' fixedWidth /></div>\n          <FormattedMessage id='status.pinned' defaultMessage='Pinned toot' />\n        </div>\n      );\n    } else if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n      const display_name_html = { __html: status.getIn(['account', 'display_name_html']) };\n\n      prepend = (\n        <div className='status__prepend'>\n          <div className='status__prepend-icon-wrapper'><Icon id='retweet' className='status__prepend-icon' fixedWidth /></div>\n          <FormattedMessage id='status.reblogged_by' defaultMessage='{name} boosted' values={{ name: <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />\n        </div>\n      );\n\n      rebloggedByText = intl.formatMessage({ id: 'status.reblogged_by', defaultMessage: '{name} boosted' }, { name: status.getIn(['account', 'acct']) });\n\n      account = status.get('account');\n      status = status.get('reblog');\n    }\n\n    if (status.get('media_attachments').size > 0) {\n      if (this.props.muted) {\n        media = (\n          <AttachmentList\n            compact\n            media={status.get('media_attachments')}\n          />\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Audio} loading={this.renderLoadingAudioPlayer} >\n            {Component => (\n              <Component\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\n                poster={attachment.get('preview_url') || status.getIn(['account', 'avatar_static'])}\n                backgroundColor={attachment.getIn(['meta', 'colors', 'background'])}\n                foregroundColor={attachment.getIn(['meta', 'colors', 'foreground'])}\n                accentColor={attachment.getIn(['meta', 'colors', 'accent'])}\n                duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                cacheWidth={this.props.cacheMediaWidth}\n              />\n            )}\n          </Bundle>\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} >\n            {Component => (\n              <Component\n                preview={attachment.get('preview_url')}\n                blurhash={attachment.get('blurhash')}\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                inline\n                sensitive={status.get('sensitive')}\n                onOpenVideo={this.handleOpenVideo}\n                cacheWidth={this.props.cacheMediaWidth}\n                visible={this.state.showMedia}\n                onToggleVisibility={this.handleToggleMediaVisibility}\n              />\n            )}\n          </Bundle>\n        );\n      } else {\n        media = (\n          <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery}>\n            {Component => (\n              <Component\n                media={status.get('media_attachments')}\n                sensitive={status.get('sensitive')}\n                height={110}\n                onOpenMedia={this.props.onOpenMedia}\n                cacheWidth={this.props.cacheMediaWidth}\n                defaultWidth={this.props.cachedMediaWidth}\n                visible={this.state.showMedia}\n                onToggleVisibility={this.handleToggleMediaVisibility}\n              />\n            )}\n          </Bundle>\n        );\n      }\n    } else if (status.get('spoiler_text').length === 0 && status.get('card')) {\n      media = (\n        <Card\n          onOpenMedia={this.props.onOpenMedia}\n          card={status.get('card')}\n          cacheWidth={this.props.cacheMediaWidth}\n          defaultWidth={this.props.cachedMediaWidth}\n          sensitive={status.get('sensitive')}\n        />\n      );\n    }\n\n    // if (otherAccounts && otherAccounts.size > 0) {\n    //   statusAvatar = <AvatarComposite accounts={otherAccounts} size={48} />;\n    // } else if (account === undefined || account === null) {\n    //   statusAvatar = <Avatar account={status.get('account')} size={48} />;\n    // } else {\n    //   statusAvatar = <AvatarOverlay account={status.get('account')} friend={account} />;\n    // }\n    statusAvatar = <Avatar account={status.get('account')} size={36} />;\n\n    return (\n      <HotKeys handlers={handlers}>\n        <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}>\n          {prepend}\n\n          <div className={classNames('status__reply', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted, read: unread === false })} data-id={status.get('id')}>\n            <div className='status__info'>\n              <div>\n                <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>\n                  <div className='status__avatar'>\n                    {statusAvatar}\n                  </div>\n\n                  <DisplayName account={status.get('account')} others={otherAccounts} />\n                </a>\n              </div>\n              <div>\n                <a\n                  href={status.get('url')}\n                  className='status__relative-time'\n                  target='_blank'\n                  rel='noopener noreferrer'\n                >\n                  <RelativeTimestamp timestamp={status.get('created_at')} />\n                </a>\n                {/*<span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span>*/}\n              </div>\n            </div>\n\n            <StatusContent status={status} onClick={this.handleClick} expanded={!status.get('hidden')} showThread={showThread} onExpandedToggle={this.handleExpandedToggle} collapsable onCollapsedToggle={this.handleCollapsedToggle} />\n\n            {media}\n\n            <StatusActionBar scrollKey={scrollKey} status={status} account={account} {...other} />\n            {this.props.children}\n          </div>\n        </div>\n      </HotKeys>\n    );\n  }\n\n}\n","import StatusReply from './status_reply';\n\nexport default StatusReply;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StatusReply from '../components/status_reply';\nimport { makeGetStatus } from 'brighteon/selectors';\nimport {\n  replyCompose,\n  mentionCompose,\n  directCompose,\n  showComposePopup,\n} from 'brighteon/actions/compose';\nimport {\n  reblog,\n  favourite,\n  bookmark,\n  unreblog,\n  unfavourite,\n  unbookmark,\n  pin,\n  unpin,\n} from 'brighteon/actions/interactions';\nimport {\n  muteStatus,\n  unmuteStatus,\n  deleteStatus,\n  hideStatus,\n  revealStatus,\n  toggleStatusCollapse,\n  editStatus,\n} from 'brighteon/actions/statuses';\nimport {\n  unmuteAccount,\n  unblockAccount,\n} from 'brighteon/actions/accounts';\nimport {\n  blockDomain,\n  unblockDomain,\n} from 'brighteon/actions/domain_blocks';\nimport { initMuteModal } from 'brighteon/actions/mutes';\nimport { initBlockModal } from 'brighteon/actions/blocks';\nimport { initReport } from 'brighteon/actions/reports';\nimport { openModal } from 'brighteon/actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { boostModal, deleteModal, me } from 'brighteon/initial_state';\nimport { showAlertForError } from 'brighteon/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  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  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 mapStateToProps = (state, props) => ({\n    status: getStatus(state, props),\n    account: state.getIn(['accounts', me]),\n  });\n\n  return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n  onReply(status, router) {\n    dispatch((_, getState) => {\n      let state = getState();\n\n      if (state.getIn(['compose', 'text']).trim().length !== 0) {\n        dispatch(openModal('CONFIRM', {\n          message: intl.formatMessage(messages.replyMessage),\n          confirm: intl.formatMessage(messages.replyConfirm),\n          onConfirm: () => {\n            dispatch(replyCompose(status, router));\n            dispatch(showComposePopup(true));\n          },\n        }));\n      } else {\n        dispatch(replyCompose(status, router));\n        dispatch(showComposePopup(true));\n      }\n    });\n  },\n\n  onModalReblog(status) {\n    if (status.get('reblogged')) {\n      dispatch(unreblog(status));\n    } else {\n      dispatch(reblog(status));\n    }\n  },\n\n  onReblog(status, e) {\n    if ((e && e.shiftKey) || !boostModal) {\n      this.onModalReblog(status);\n    } else {\n      dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));\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  onBookmark(status) {\n    if (status.get('bookmarked')) {\n      dispatch(unbookmark(status));\n    } else {\n      dispatch(bookmark(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, withRedraft = false) {\n    if (!deleteModal) {\n      dispatch(deleteStatus(status.get('id'), 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: () => {\n          dispatch(deleteStatus(status.get('id'), withRedraft));\n          if (withRedraft) {\n            dispatch(showComposePopup(true));\n          }\n        },\n      }));\n    }\n  },\n\n  onEdit (status) {\n    dispatch(editStatus(status.get('id')));\n    dispatch(showComposePopup(true));\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, options) {\n    dispatch(openModal('VIDEO', { media, options }));\n  },\n\n  onBlock(status) {\n    const account = status.get('account');\n    dispatch(initBlockModal(account));\n  },\n\n  onUnblock(account) {\n    dispatch(unblockAccount(account.get('id')));\n  },\n\n  onReport(status) {\n    dispatch(initReport(status.get('account'), status));\n  },\n\n  onMute(account) {\n    dispatch(initMuteModal(account));\n  },\n\n  onUnmute(account) {\n    dispatch(unmuteAccount(account.get('id')));\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  onToggleCollapsed(status, isCollapsed) {\n    dispatch(toggleStatusCollapse(status.get('id'), isCollapsed));\n  },\n\n  onBlockDomain(domain) {\n    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: intl.formatMessage(messages.blockDomainConfirm),\n      onConfirm: () => dispatch(blockDomain(domain)),\n    }));\n  },\n\n  onUnblockDomain(domain) {\n    dispatch(unblockDomain(domain));\n  },\n\n  onOpenRepliesModal(status) {\n    dispatch(openModal('REPLIES', {\n      status,\n    }));\n  },\n\n  onOpenReblogsModal(status) {\n    dispatch(openModal('REBLOGS', {\n      status,\n    }));\n  },\n\n  onOpenFavouritesModal(status) {\n    dispatch(openModal('FAVOURITES', {\n      status,\n    }));\n  },\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(StatusReply));\n","import { connect } from 'react-redux';\nimport ComposeForm from '../components/compose_form';\nimport {\n  changeCompose,\n  submitCompose,\n  clearComposeSuggestions,\n  fetchComposeSuggestions,\n  selectComposeSuggestion,\n  changeComposeSpoilerText,\n  insertEmojiCompose,\n  uploadCompose,\n  replyCompose,\n  // } from 'brighteon/actions/compose';\n} from 'brighteon/actions/compose_in_reply';\nimport { closeModal } from 'brighteon/actions/modal';\n\nconst mapStateToProps = state => ({\n  text: state.getIn(['compose_in_reply', 'text']),\n  suggestions: state.getIn(['compose_in_reply', 'suggestions']),\n  spoiler: state.getIn(['compose_in_reply', 'spoiler']),\n  spoilerText: state.getIn(['compose_in_reply', 'spoiler_text']),\n  privacy: state.getIn(['compose_in_reply', 'privacy']),\n  focusDate: state.getIn(['compose_in_reply', 'focusDate']),\n  caretPosition: state.getIn(['compose_in_reply', 'caretPosition']),\n  preselectDate: state.getIn(['compose_in_reply', 'preselectDate']),\n  isSubmitting: state.getIn(['compose_in_reply', 'is_submitting']),\n  isChangingUpload: state.getIn(['compose_in_reply', 'is_changing_upload']),\n  isUploading: state.getIn(['compose_in_reply', 'is_uploading']),\n  showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']),\n  anyMedia: state.getIn(['compose_in_reply', 'media_attachments']).size > 0,\n  inReplyTo: state.getIn(['compose_in_reply', 'in_reply_to']),\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n\n  onChange(text) {\n    dispatch(changeCompose(text));\n  },\n\n  onSubmit(router) {\n    dispatch(submitCompose(router));\n  },\n\n  onClearSuggestions() {\n    dispatch(clearComposeSuggestions());\n  },\n\n  onFetchSuggestions(token) {\n    dispatch(fetchComposeSuggestions(token));\n  },\n\n  onSuggestionSelected(position, token, suggestion, path) {\n    dispatch(selectComposeSuggestion(position, token, suggestion, path));\n  },\n\n  onChangeSpoilerText(checked) {\n    dispatch(changeComposeSpoilerText(checked));\n  },\n\n  onPaste(files) {\n    dispatch(uploadCompose(files));\n  },\n\n  onPickEmoji(position, data, needsSpace) {\n    dispatch(insertEmojiCompose(position, data, needsSpace));\n  },\n\n  closeComposeModal() {\n    dispatch(closeModal('COMPOSE'));\n  },\n\n  replyCompose(status) {\n    dispatch(replyCompose(status));\n  },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ComposeForm);\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Avatar from 'brighteon/components/avatar';\nimport RelativeTimestamp from 'brighteon/components/relative_timestamp';\nimport DisplayName from 'brighteon/components/display_name';\nimport StatusContent from 'brighteon/components/status_content';\nimport { StatusActionBar } from './components';\nimport AttachmentList from 'brighteon/components/attachment_list';\nimport Card from 'brighteon/features/status/components/card';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { MediaGallery, Video, Audio } from 'brighteon/features/ui/util/async-components';\nimport classNames from 'classnames';\nimport Icon from 'brighteon/components/icon';\nimport { displayMedia } from 'brighteon/initial_state';\nimport api from 'brighteon/api';\nimport { checkIfAndroid } from 'brighteon/is_mobile';\nimport Immutable from 'immutable';\n\n// We use the component (and not the container) since we do not want\n// to use the progress bar to show download progress\nimport Bundle from 'brighteon/features/ui/components/bundle';\nimport { importFetchedStatuses } from 'brighteon/actions/importer';\n\nimport { connect } from 'react-redux';\nimport { StatusReplyContainer } from './containers';\nimport ComposeFormContainer from '../../../../../../brighteon/components/status_with_reply/containers/compose_form_container';\n\nexport const textForScreenReader = (intl, status, rebloggedByText = false) => {\n  const displayName = status.getIn(['account', 'display_name']);\n\n  const values = [\n    displayName.length === 0 ? status.getIn(['account', 'acct']).split('@')[0] : displayName,\n    status.get('spoiler_text') && status.get('hidden') ? status.get('spoiler_text') : status.get('search_index').slice(status.get('spoiler_text').length),\n    intl.formatDate(status.get('created_at'), { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }),\n    status.getIn(['account', 'acct']),\n  ];\n\n  if (rebloggedByText) {\n    values.push(rebloggedByText);\n  }\n\n  return values.join(', ');\n};\n\nexport const defaultMediaVisibility = (status) => {\n  if (!status) {\n    return undefined;\n  }\n\n  if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n    status = status.get('reblog');\n  }\n\n  return (displayMedia !== 'hide_all' && !status.get('sensitive') || displayMedia === 'show_all');\n};\n\nconst mapDispatchToProps = dispatch => ({\n  importFetchedStatuses: (...args) => dispatch(importFetchedStatuses(...args)),\n});\n\nconst mapStateToProps = state => ({\n  me: state.getIn(['meta', 'me']),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps) @injectIntl\nclass Status extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    statuses: ImmutablePropTypes.map,\n    status: ImmutablePropTypes.map,\n    account: ImmutablePropTypes.map,\n    accounts: ImmutablePropTypes.map,\n    otherAccounts: ImmutablePropTypes.list,\n    onClick: PropTypes.func,\n    onReply: PropTypes.func,\n    onFavourite: PropTypes.func,\n    onReblog: PropTypes.func,\n    onDelete: PropTypes.func,\n    onDirect: PropTypes.func,\n    onMention: PropTypes.func,\n    onPin: PropTypes.func,\n    onOpenMedia: PropTypes.func,\n    onOpenVideo: PropTypes.func,\n    onBlock: PropTypes.func,\n    onEmbed: PropTypes.func,\n    onHeightChange: PropTypes.func,\n    onToggleHidden: PropTypes.func,\n    onToggleCollapsed: PropTypes.func,\n    muted: PropTypes.bool,\n    hidden: PropTypes.bool,\n    unread: PropTypes.bool,\n    onMoveUp: PropTypes.func,\n    onMoveDown: PropTypes.func,\n    showThread: PropTypes.bool,\n    showPinnedMsg: PropTypes.bool,\n    getScrollPosition: PropTypes.func,\n    updateScrollBottom: PropTypes.func,\n    cacheMediaWidth: PropTypes.func,\n    cachedMediaWidth: PropTypes.number,\n    scrollKey: PropTypes.string,\n    username: PropTypes.string,\n    avatar: PropTypes.string,\n    statusId: PropTypes.any,\n    replyOrigin: PropTypes.any,\n    onOpenRepliesModal: PropTypes.func,\n    onOpenReblogsModal: PropTypes.func,\n    onOpenFavouritesModal: PropTypes.func,\n  };\n\n  // Avoid checking props that are functions (and whose equality will always\n  // evaluate to false. See react-immutable-pure-component for usage.\n  updateOnProps = [\n    'status',\n    'account',\n    'muted',\n    'hidden',\n  ];\n\n  state = {\n    showMedia: new Immutable.Map({}),\n    statusId: undefined,\n    rerenderFlag: false,\n    showReplyBox: true,\n    showAllReplies: false,\n  };\n\n  static getDerivedStateFromProps(nextProps, prevState) {\n    if (nextProps.status && nextProps.status.get('id') !== prevState.statusId) {\n      return {\n        // showMedia: defaultMediaVisibility(nextProps.status),\n        statusId: nextProps.status.get('id'),\n      };\n    } else {\n      return null;\n    }\n  }\n\n  handleToggleMediaVisibility = (status) => () => {\n    const statusId = status.get('id');\n    const currentShowMediaOpt = this.state.showMedia.get(statusId);\n    const newShowMedia = this.state.showMedia.set(statusId, currentShowMediaOpt ? false : true);\n    this.setState({ showMedia: newShowMedia });\n  }\n\n  handleClick = (status) => () => {\n    window.open(status.get('url'), '_blank');\n  }\n\n  handleExpandClick = (e) => {\n    if (this.props.onClick) {\n      this.props.onClick();\n      return;\n    }\n\n    if (e.button === 0) {\n      if (!this.context.router) {\n        return;\n      }\n\n      const { status } = this.props;\n      this.context.router.history.push(`/statuses/${status.getIn(['reblog', 'id'], status.get('id'))}`);\n    }\n  }\n\n  handleAccountClick = () => {\n    // if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n    //   const id = e.currentTarget.getAttribute('data-id');\n    //   e.preventDefault();\n    //   this.context.router.history.push(`/accounts/${id}`);\n    // }\n  }\n\n  handleExpandedToggle = () => {\n    this.props.onToggleHidden(this._properStatus());\n  }\n\n  handleCollapsedToggle = isCollapsed => {\n    this.props.onToggleCollapsed(this._properStatus(), isCollapsed);\n  }\n\n  renderLoadingMediaGallery() {\n    return <div className='media-gallery' style={{ height: '110px' }} />;\n  }\n\n  renderLoadingVideoPlayer() {\n    return <div className='video-player' style={{ height: '110px' }} />;\n  }\n\n  renderLoadingAudioPlayer() {\n    return <div className='audio-player' style={{ height: '110px' }} />;\n  }\n\n  handleOpenVideo = (media, options) => {\n    this.props.onOpenVideo(media, options);\n  }\n\n  handleHotkeyOpenMedia = e => {\n    const { onOpenMedia, onOpenVideo } = this.props;\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        onOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });\n      } else {\n        onOpenMedia(status.get('media_attachments'), 0);\n      }\n    }\n  }\n\n  handleHotkeyReply = e => {\n    e.preventDefault();\n    this.props.onReply(this._properStatus(), this.context.router.history);\n  }\n\n  handleHotkeyFavourite = () => {\n    this.props.onFavourite(this._properStatus());\n  }\n\n  handleHotkeyBoost = e => {\n    this.props.onReblog(this._properStatus(), e);\n  }\n\n  handleHotkeyMention = e => {\n    e.preventDefault();\n    this.props.onMention(this._properStatus().get('account'), this.context.router.history);\n  }\n\n  handleHotkeyOpen = () => {\n    this.context.router.history.push(`/statuses/${this._properStatus().get('id')}`);\n  }\n\n  handleHotkeyOpenProfile = () => {\n    this.context.router.history.push(`/accounts/${this._properStatus().getIn(['account', 'id'])}`);\n  }\n\n  handleHotkeyMoveUp = e => {\n    this.props.onMoveUp(this.props.status.get('id'), e.target.getAttribute('data-featured'));\n  }\n\n  handleHotkeyMoveDown = e => {\n    this.props.onMoveDown(this.props.status.get('id'), e.target.getAttribute('data-featured'));\n  }\n\n  handleHotkeyToggleHidden = () => {\n    this.props.onToggleHidden(this._properStatus());\n  }\n\n  handleHotkeyToggleSensitive = () => {\n    this.handleToggleMediaVisibility(this.props.status)();\n  }\n\n  _properStatus() {\n    const { status } = this.props;\n\n    if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n      return status.get('reblog');\n    } else {\n      return status;\n    }\n  }\n\n  handleRef = c => {\n    this.node = c;\n  }\n\n  handleReply = () => {\n    // this.props.onReply(this.props.status);\n    this.replyTextareaRef.textarea.focus();\n  }\n\n  setTextareaRef = (c) => {\n    this.replyTextareaRef = c;\n  }\n\n  toggleShowAllReplies = () => {\n    this.setState({\n      showAllReplies: !this.state.showAllReplies,\n    });\n  }\n\n  // OnInput() {\n  //   this.style.height = 'auto';\n  //   this.style.height = (this.scrollHeight) + 'px';\n  // }\n\n  getDescendants = () => {\n    const { status } = this.props;\n    let status_id = status.get('reblog') && status.getIn(['reblog', 'id']);\n    status_id = status_id || status.get('id');\n    api().get(`/api/v1/statuses/${status_id}/context`)\n      .then(({ data }) => {\n        if (data.descendants.length > 0) {\n          this.props.importFetchedStatuses(data.descendants);\n        }\n        if (data.ancestors.length > 0) {\n          this.props.importFetchedStatuses(data.ancestors);\n        }\n        if (data.ancestors.length > 0 || data.descendants.length > 0) {\n          // workaround start: force rerender\n          this.setState({\n            rerenderFlag: true,\n          });\n          this.setState({\n            rerenderFlag: false,\n          });\n          // workaround end\n        }\n      })\n      .catch(err => {\n        console.error(err);\n      });\n  }\n\n  componentDidMount() {\n    if (this.props.status) {\n      this.getDescendants();\n      if (this.props.status.get('replies_count') === 0) {\n        const status = this.props.status.get('reblog');\n        if (status && status.get('replies_count') > 0) {\n          this.getDescendants();\n        }\n      }\n    }\n  }\n\n  ensureShowReplyBox = () => {\n    if (checkIfAndroid()) {\n      let element = this.replyBox;\n\n      let yPosition = 0;\n      while (element) {\n        yPosition += (element.offsetTop - element.scrollTop + element.clientTop);\n        element = element.offsetParent;\n      }\n      if (yPosition - window.scrollY > 300) {\n        window.scrollBy(0, 200);\n      }\n    }\n  }\n\n  originContent = (status_id) => {\n    let originStatus = '';\n    let { showThread, avatar, statusId, replyOrigin, ...other } = this.props;\n    const status = this.props.statuses.get(status_id);\n    if (!status) {\n      return '';\n    }\n    if (status.get('in_reply_to')) {\n      originStatus = this.originContent(status.get('in_reply_to_id'));\n    }\n\n    const account_id = status.get('account');\n    const account = this.props.accounts.get(account_id);\n    const replies = Object.values(this.props.statuses.toJS())\n      .filter(st => st.in_reply_to_id === status.get('id'))\n      .sort((st1, st2) => st1.created_at > st2.created_at ? 1 : -1);\n    const repliesCount = replies.length;\n\n    return (\n      <>\n        {originStatus}\n        <div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id') })} data-id={status.get('id')}>\n          <div className='status__expand' onClick={this.handleExpandClick} role='presentation' />\n          <div className='status__info'>\n            <div>\n              <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>\n                <div className='status__avatar'>\n                  <Avatar account={account} size={48} />\n                </div>\n                <DisplayName account={account} />\n              </a>\n            </div>\n            <div>\n              <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'>\n                <RelativeTimestamp timestamp={status.get('created_at')} />\n              </a>\n            </div>\n          </div>\n\n          <StatusContent status={status} onClick={this.handleClick(status)} expanded={!status.get('hidden')} showThread={showThread} onExpandedToggle={this.handleExpandedToggle} collapsable onCollapsedToggle={this.handleCollapsedToggle} />\n\n          {this.mediaSection(status)}\n\n          <StatusActionBar onReply={this.handleReply} repliesCount={repliesCount} {...other} status={status} account={account} />\n        </div>\n      </>\n    );\n\n  }\n\n  mediaSection = (status) => {\n    let media = null;\n    if (status.get('media_attachments').size > 0) {\n      if (this.props.muted) {\n        media = (\n          <AttachmentList\n            compact\n            media={status.get('media_attachments')}\n          />\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Audio} loading={this.renderLoadingAudioPlayer}>\n            {Component => (\n              <Component\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\n                poster={attachment.get('preview_url') || status.getIn(['account', 'avatar_static'])}\n                backgroundColor={attachment.getIn(['meta', 'colors', 'background'])}\n                foregroundColor={attachment.getIn(['meta', 'colors', 'foreground'])}\n                accentColor={attachment.getIn(['meta', 'colors', 'accent'])}\n                duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                cacheWidth={this.props.cacheMediaWidth}\n              />\n            )}\n          </Bundle>\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer}>\n            {Component => (\n              <Component\n                preview={attachment.get('preview_url')}\n                blurhash={attachment.get('blurhash')}\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                inline\n                sensitive={status.get('sensitive')}\n                onOpenVideo={this.handleOpenVideo}\n                cacheWidth={this.props.cacheMediaWidth}\n                visible={this.state.showMedia.get(status.get('id'))}\n                onToggleVisibility={this.handleToggleMediaVisibility(status)}\n              />\n            )}\n          </Bundle>\n        );\n      } else {\n        media = (\n          <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery}>\n            {Component => (\n              <Component\n                media={status.get('media_attachments')}\n                sensitive={status.get('sensitive')}\n                height={110}\n                onOpenMedia={this.props.onOpenMedia}\n                cacheWidth={this.props.cacheMediaWidth}\n                defaultWidth={this.props.cachedMediaWidth}\n                visible={this.state.showMedia.get(status.get('id'))}\n                onToggleVisibility={this.handleToggleMediaVisibility(status)}\n              />\n            )}\n          </Bundle>\n        );\n      }\n    } else if (status.get('spoiler_text').length === 0 && status.get('card')) {\n      media = (\n        <Card\n          onOpenMedia={this.props.onOpenMedia}\n          card={status.get('card')}\n          cacheWidth={this.props.cacheMediaWidth}\n          defaultWidth={this.props.cachedMediaWidth}\n          sensitive={status.get('sensitive')}\n        />\n      );\n    }\n\n    return media;\n  }\n\n  render () {\n    let media = null;\n    let statusAvatar, prepend = '', rebloggedByText;\n\n    const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey, showPinnedMsg, pinned } = this.props;\n\n    let { status, account, username, avatar, statusId, replyOrigin, ...other } = this.props;\n\n    if (status === null) {\n      return null;\n    }\n\n    if (replyOrigin && status.get('visibility') !== 'public') {\n      return '';\n    }\n\n    if (hidden) {\n      return (\n        <div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex='0'>\n          {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}\n          {status.get('content')}\n        </div>\n      );\n    }\n\n    if (status.get('filtered') || status.getIn(['reblog', 'filtered'])) {\n      return (\n        <div className='status__wrapper status__wrapper--filtered focusable' tabIndex='0' ref={this.handleRef}>\n          <FormattedMessage id='status.filtered' defaultMessage='Filtered' />\n        </div>\n      );\n    }\n\n    if (replyOrigin) {\n      const display_name_html = { __html: status.getIn(['account', 'display_name_html']) };\n\n      prepend = (\n        <div className='status__prepend'>\n          <FormattedMessage id='status.replied_to' defaultMessage=\"{origin} replied to {name}'s post\" values={{ origin: replyOrigin, name: <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />\n        </div>\n      );\n    }\n\n    if (pinned && status.get('pinned')) {\n      prepend = showPinnedMsg && (\n        <>\n          {prepend}\n          <div className='status__prepend'>\n            <div className='status__prepend-icon-wrapper'><Icon id='thumb-tack' className='status__prepend-icon' size={20} /></div>\n            <FormattedMessage id='status.pinned' defaultMessage='Pinned post' />\n          </div>\n          <div className='border' />\n        </>\n      );\n    } else if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n      const display_name_html = { __html: status.getIn(['account', 'display_name_html']) };\n\n      prepend = (\n        <>\n          {prepend}\n          <div className='status__prepend'>\n            <div className='status__prepend-icon-wrapper'><Icon id='retweet' className='status__prepend-icon' size={20} /></div>\n            <FormattedMessage id='status.reblogged_by' defaultMessage='{name} reposted' values={{ name: <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />\n          </div>\n          <div className='border' />\n        </>\n      );\n\n      rebloggedByText = intl.formatMessage({ id: 'status.reblogged_by', defaultMessage: '{name} reposted' }, { name: status.getIn(['account', 'acct']) });\n\n      account = status.get('account');\n      status = status.get('reblog');\n    }\n\n    if (status.get('media_attachments').size > 0) {\n      if (this.props.muted) {\n        media = (\n          <AttachmentList\n            compact\n            media={status.get('media_attachments')}\n          />\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Audio} loading={this.renderLoadingAudioPlayer}>\n            {Component => (\n              <Component\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\n                poster={attachment.get('preview_url') || status.getIn(['account', 'avatar_static'])}\n                backgroundColor={attachment.getIn(['meta', 'colors', 'background'])}\n                foregroundColor={attachment.getIn(['meta', 'colors', 'foreground'])}\n                accentColor={attachment.getIn(['meta', 'colors', 'accent'])}\n                duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                cacheWidth={this.props.cacheMediaWidth}\n              />\n            )}\n          </Bundle>\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer}>\n            {Component => (\n              <Component\n                preview={attachment.get('preview_url')}\n                blurhash={attachment.get('blurhash')}\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                inline\n                sensitive={status.get('sensitive')}\n                onOpenVideo={this.handleOpenVideo}\n                cacheWidth={this.props.cacheMediaWidth}\n                visible={this.state.showMedia.get(status.get('id'))}\n                onToggleVisibility={this.handleToggleMediaVisibility(status)}\n              />\n            )}\n          </Bundle>\n        );\n      } else {\n        media = (\n          <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery}>\n            {Component => (\n              <Component\n                media={status.get('media_attachments')}\n                sensitive={status.get('sensitive')}\n                height={110}\n                onOpenMedia={this.props.onOpenMedia}\n                cacheWidth={this.props.cacheMediaWidth}\n                defaultWidth={this.props.cachedMediaWidth}\n                visible={this.state.showMedia.get(status.get('id'))}\n                onToggleVisibility={this.handleToggleMediaVisibility(status)}\n              />\n            )}\n          </Bundle>\n        );\n      }\n    } else if (status.get('spoiler_text').length === 0 && status.get('card')) {\n      media = (\n        <Card\n          onOpenMedia={this.props.onOpenMedia}\n          card={status.get('card')}\n          cacheWidth={this.props.cacheMediaWidth}\n          defaultWidth={this.props.cachedMediaWidth}\n          sensitive={status.get('sensitive')}\n        />\n      );\n    }\n\n    statusAvatar = <Avatar account={status.get('account')} size={48} />;\n\n    const avatarStyle = {\n      width: '36px',\n      height: '36px',\n      backgroundSize: '36px 36px',\n      backgroundImage: `url(${avatar})`,\n    };\n\n    if (!statusId || (statusId === status.get('id'))) {\n      const replies = Object.values(this.props.statuses.toJS())\n        .filter(st => st.in_reply_to_id === status.get('id'))\n        .sort((st1, st2) => st1.created_at > st2.created_at ? 1 : -1);\n      const repliesCount = replies.length;\n\n      return (\n        <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}>\n          {prepend}\n          {status.get('in_reply_to') && this.originContent(status.getIn(['in_reply_to', 'id']))}\n\n          <div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted, read: unread === false })} data-id={status.get('id')}>\n            <div className='status__expand' onClick={this.handleExpandClick} role='presentation' />\n            <div className='status__info'>\n              <div>\n                <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>\n                  <div className='status__avatar'>\n                    {statusAvatar}\n                  </div>\n\n                  <DisplayName account={status.get('account')} others={otherAccounts} />\n                </a>\n              </div>\n              <div>\n                <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'>\n                  <RelativeTimestamp timestamp={status.get('created_at')} />\n                </a>\n              </div>\n            </div>\n\n            <StatusContent status={status} onClick={this.handleClick(status)} expanded={!status.get('hidden')} showThread={showThread} onExpandedToggle={this.handleExpandedToggle} collapsable onCollapsedToggle={this.handleCollapsedToggle} />\n\n            {media}\n\n            <StatusActionBar scrollKey={scrollKey} status={status} account={status.get('account')} {...other} onReply={this.handleReply} repliesCount={repliesCount} showAllReplies={this.state.showAllReplies} toggleShowAllReplies={this.toggleShowAllReplies} />\n\n            {\n              replies.filter(\n                (reply, idx) => (idx < 3 || this.state.showAllReplies),\n              ).map((reply) => (\n                <StatusReplyContainer\n                  key={reply.id}\n                  id={reply.id}\n                  contextType={this.props.contextType}\n                  openComposeModal={this.props.openComposeModal}\n                />\n              ))\n            }\n\n            {\n              !this.state.showAllReplies && repliesCount > 3 && (\n                <button className='status__content__read-more-button' onClick={this.toggleShowAllReplies}>\n                  <span>Show All Replies</span>\n                </button>\n              )\n            }\n\n            {\n              this.state.showAllReplies && repliesCount > 3 && (\n                <button className='status__content__read-more-button' onClick={this.toggleShowAllReplies}>\n                  <span>Show Top 3 Replies</span>\n                </button>\n              )\n            }\n\n            {\n              this.state.showReplyBox && this.props.me && (\n                <div className='status__reply'>\n                  <div className='status__avatar'>\n                    <div className='account__avatar' style={avatarStyle} />\n                  </div>\n\n                  <div className='status__reply-box'>\n                    <ComposeFormContainer passRefCb={this.setTextareaRef} ancestor={this.props.status} getReplies={this.getDescendants} />\n                  </div>\n                </div>\n              )\n            }\n          </div>\n        </div>\n      );\n    }\n\n    return null;\n  }\n\n}\n","import StatusWithReply from './status_with_reply';\n\nexport default StatusWithReply;\n","import React from 'react';\nimport { connect } from 'react-redux';\n// import Status from '../components/status';\nimport Status from '../components/status_with_reply';\nimport { makeGetStatus } from 'brighteon/selectors';\nimport {\n  replyCompose,\n  mentionCompose,\n  directCompose,\n  showComposePopup,\n} from 'brighteon/actions/compose';\nimport {\n  reblog,\n  favourite,\n  bookmark,\n  unreblog,\n  unfavourite,\n  unbookmark,\n  pin,\n  unpin,\n} from 'brighteon/actions/interactions';\nimport {\n  muteStatus,\n  unmuteStatus,\n  deleteStatus,\n  hideStatus,\n  revealStatus,\n  toggleStatusCollapse,\n  editStatus,\n} from 'brighteon/actions/statuses';\nimport {\n  unmuteAccount,\n  unblockAccount,\n} from 'brighteon/actions/accounts';\nimport {\n  blockDomain,\n  unblockDomain,\n} from 'brighteon/actions/domain_blocks';\nimport { initMuteModal } from 'brighteon/actions/mutes';\nimport { initBlockModal } from 'brighteon/actions/blocks';\nimport { initReport } from 'brighteon/actions/reports';\nimport { openModal } from 'brighteon/actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { boostModal, deleteModal } from 'brighteon/initial_state';\nimport { showAlertForError } from 'brighteon/actions/alerts';\nimport { setPostForChat } from '../../../../actions/chats';\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  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 mapStateToProps = (state, props) => ({\n    statuses: state.get('statuses'),\n    status: getStatus(state, props),\n    accounts: state.get('accounts'),\n  });\n\n  return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n  onReply(status, router) {\n    dispatch((_, getState) => {\n      let state = getState();\n\n      if (state.getIn(['compose', 'text']).trim().length !== 0) {\n        dispatch(openModal('CONFIRM', {\n          message: intl.formatMessage(messages.replyMessage),\n          confirm: intl.formatMessage(messages.replyConfirm),\n          onConfirm: () => dispatch(replyCompose(status, router)),\n        }));\n      } else {\n        dispatch(replyCompose(status, router));\n      }\n    });\n  },\n\n  onModalReblog(status) {\n    if (status.get('reblogged')) {\n      dispatch(unreblog(status));\n    } else {\n      dispatch(reblog(status));\n    }\n  },\n\n  onReblog(status, e) {\n    if ((e && e.shiftKey) || !boostModal) {\n      this.onModalReblog(status);\n    } else {\n      dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));\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  onBookmark(status) {\n    if (status.get('bookmarked')) {\n      dispatch(unbookmark(status));\n    } else {\n      dispatch(bookmark(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, withRedraft = false) {\n    if (!deleteModal) {\n      dispatch(deleteStatus(status.get('id'), 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: () => {\n          dispatch(deleteStatus(status.get('id'), withRedraft));\n          if (withRedraft) {\n            dispatch(showComposePopup(true));\n          }\n        },\n      }));\n    }\n  },\n\n  onEdit (status) {\n    dispatch(editStatus(status.get('id')));\n    dispatch(showComposePopup(true));\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, options) {\n    dispatch(openModal('VIDEO', { media, options }));\n  },\n\n  onBlock(status) {\n    const account = status.get('account');\n    dispatch(initBlockModal(account));\n  },\n\n  onUnblock(account) {\n    dispatch(unblockAccount(account.get('id')));\n  },\n\n  onReport(status) {\n    dispatch(initReport(status.get('account'), status));\n  },\n\n  onMute(account) {\n    dispatch(initMuteModal(account));\n  },\n\n  onUnmute(account) {\n    dispatch(unmuteAccount(account.get('id')));\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  onToggleCollapsed(status, isCollapsed) {\n    dispatch(toggleStatusCollapse(status.get('id'), isCollapsed));\n  },\n\n  onBlockDomain(domain) {\n    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: intl.formatMessage(messages.blockDomainConfirm),\n      onConfirm: () => dispatch(blockDomain(domain)),\n    }));\n  },\n\n  onUnblockDomain(domain) {\n    dispatch(unblockDomain(domain));\n  },\n\n  openComposeModal() {\n    dispatch(openModal('COMPOSE'));\n  },\n\n  onOpenRepliesModal(status) {\n    dispatch(openModal('REPLIES', {\n      status,\n    }));\n  },\n\n  onOpenReblogsModal(status) {\n    dispatch(openModal('REBLOGS', {\n      status,\n    }));\n  },\n\n  onOpenFavouritesModal(status) {\n    dispatch(openModal('FAVOURITES', {\n      status,\n    }));\n  },\n\n  onShareStatus (status) {\n    dispatch(setPostForChat(status));\n    dispatch(openModal('CHAT_LIST', {\n      status,\n      title: 'Send post to chat',\n    }));\n  },\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Status));\n","import React, { Fragment } from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { expandAccountTimeline } from 'brighteon/actions/timelines';\nimport { List as ImmutableList, Map as ImmutableMap } from 'immutable';\nimport StatusContainer from './containers/status_container';\nimport LoadMore from '../../../components/load_more';\n\nconst getOrder = () => {\n  let order;\n\n  if (window.location.search.includes('?order=reblogs')) {\n    order = 'reblogs';\n  } else if (window.location.search.includes('?order=replies')) {\n    order = 'replies';\n  } else if (window.location.search.includes('?order=favourites')) {\n    order = 'favourites';\n  }\n\n  return order;\n};\n\nconst generateTimelineId = function (accountId, pinned, unpinned) {\n  if (window.location.pathname.slice(0, 2) === '/@') {\n    let onlyReplies = false, onlyImage = false, onlyVideo = false, statusId = false, withReplies = false, aggregatedReplies = false, order = null;\n    if (window.location.pathname.includes('/with_replies')) {\n      aggregatedReplies = true;\n      withReplies = true;\n    } else if (window.location.pathname.includes('/photos')) {\n      onlyImage = true;\n      withReplies = true;\n    } else if (window.location.pathname.includes('/videos')) {\n      onlyVideo = true;\n      withReplies = true;\n    } else if (window.location.pathname.split('/').length === 3) {\n      statusId = true;\n      withReplies = true;\n    } else if (window.location.pathname.split('/').length === 2) {\n      withReplies = false;\n    } else {\n      withReplies = false;\n    }\n\n    order = getOrder();\n\n    return `account:${accountId}${withReplies ? ':with_replies' : ''}${onlyReplies ? ':only_replies' : ''}${aggregatedReplies ? ':aggregated_replies' : ''}${onlyImage ? ':only_image' : ''}${onlyVideo ? ':only_video' : ''}${statusId ? ':specific' : ''}${pinned ? ':pinned' : ''}${unpinned ? ':unpinned' : ''}${order ? ':order' : ''}`;\n  }\n  return '';\n};\n\nconst getParams = function (pinned, unpinned) {\n  const params = {};\n  if (window.location.pathname.slice(0, 2) === '/@') {\n    if (window.location.pathname.includes('/with_replies')) {\n      params.aggregatedReplies = true;\n      params.withReplies = true;\n    } else if (window.location.pathname.includes('/photos')) {\n      params.onlyImage = true;\n      params.withReplies = true;\n    } else if (window.location.pathname.includes('/videos')) {\n      params.onlyVideo = true;\n      params.withReplies = true;\n    } else if (window.location.pathname.split('/').length === 3) {\n      params.statusId = window.location.pathname.split('/')[2];\n      params.withReplies = true;\n    } else if (window.location.pathname.split('/').length === 2) {\n      params.withReplies = false;\n    } else {\n      params.withReplies = false;\n    }\n\n    params.order = getOrder();\n  }\n  return {\n    ...params,\n    pinned,\n    unpinned,\n  };\n};\n\nconst mapStateToProps = (state, { accountId, pinned, unpinned }) => {\n  const timelineId = generateTimelineId(accountId, pinned, unpinned);\n  const timeline = state.getIn(['timelines', timelineId], ImmutableMap());\n\n  // Filter only account's boosts and replies\n  let statusIds = timeline.get('items', ImmutableList());\n\n  return {\n    statusIds: statusIds,\n    statuses: state.get('statuses', ImmutableMap()),\n    isLoading: timeline.get('isLoading', false),\n    hasMore: timeline.get('hasMore', false),\n  };\n};\n\nexport default @connect(mapStateToProps)\nclass AccountTimeline extends React.PureComponent {\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    statusIds: ImmutablePropTypes.list.isRequired,\n    statuses: ImmutablePropTypes.map,\n    isLoading: PropTypes.bool.isRequired,\n    hasMore: PropTypes.bool.isRequired,\n    local: PropTypes.bool,\n    username: PropTypes.string.isRequired,\n    avatar: PropTypes.string,\n    statusId: PropTypes.any,\n    accountId: PropTypes.any,\n    pinned: PropTypes.any,\n    unpinned: PropTypes.any,\n  };\n\n  componentDidMount() {\n    this._connect();\n  }\n\n  componentDidUpdate(prevProps) {\n    if (prevProps.local !== this.props.local) {\n      this._connect();\n    }\n  }\n\n  _connect() {\n    const { dispatch, accountId, pinned, unpinned } = this.props;\n\n    let params = getParams(pinned, unpinned);\n\n    dispatch(expandAccountTimeline(accountId, params));\n  }\n\n  handleLoadMore = () => {\n    const { dispatch, accountId, statusIds, pinned, unpinned, statuses } = this.props;\n    const maxId = statusIds.last();\n    let params = getParams(pinned, unpinned);\n\n    if (maxId) {\n      const requestParams = {\n        maxId,\n        ...params,\n      };\n\n      if (params.order) {\n        requestParams.count = statuses.getIn([maxId, `${params.order}_count`]);\n      }\n\n      dispatch(expandAccountTimeline(accountId, requestParams));\n    }\n  };\n\n  render() {\n    const { statusIds, username, avatar, statusId: statusIdProp, isLoading, hasMore, pinned, unpinned } = this.props;\n    const loadMore = hasMore ? <LoadMore visible={!isLoading} onClick={this.handleLoadMore} /> : null;\n\n    return (\n      <Fragment>\n        {\n          statusIds.map(statusId => (\n            <StatusContainer\n              key={`f-${statusId}`}\n              id={statusId}\n              onMoveUp={null}\n              onMoveDown={null}\n              contextType={'public'}\n              username={username}\n              avatar={avatar}\n              statusId={statusIdProp}\n              showThread\n              showPinnedMsg={pinned || unpinned ? true : false}\n              pinned\n            />\n          ),\n          )\n        }\n        {loadMore}\n      </Fragment>\n    );\n  }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport Icon from '../../../../brighteon/components/icon';\nimport { showComposePopup } from '../../../actions/compose';\n\nconst mapStateToProps = state => ({\n  showPopup: state.getIn(['compose', 'showPopup']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n  onShowPopup (showPopup) {\n    dispatch(showComposePopup(showPopup));\n  },\n});\n\nclass NewPostModalHandler extends React.PureComponent {\n\n  static propTypes = {\n    showPopup: PropTypes.bool.isRequired,\n    onShowPopup: PropTypes.func,\n  };\n\n  handleNewPostModal = () => {\n    this.props.onShowPopup(true);\n  }\n\n  closeNewPostModal = () => {\n    this.props.onShowPopup(false);\n  }\n\n  render () {\n    return (\n      <div>\n        <div key='floating-new-post-button' className='floating-new-post-button z2' onClick={this.handleNewPostModal} role='button' tabIndex={0} >\n          <Icon id='new-post-white' size={20} />\n        </div>\n      </div>\n    );\n  }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NewPostModalHandler);\n","import React, { Fragment } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport configureStore from '../store/configureStore';\nimport { hydrateStore } from '../actions/store';\nimport { setupBrowserNotifications, expandNotifications } from '../actions/notifications';\nimport { IntlProvider, addLocaleData } from 'react-intl';\nimport { getLocale } from '../locales';\nimport AccountTimeline from '../features/standalone/account_timeline';\nimport ModalContainer from '../features/ui/containers/modal_container';\nimport NewPostModalHandler from '../features/ui/containers/new_post_modal_handler';\nimport LinkFooter from '../features/ui/components/link_footer';\nimport DonateBoxContainer from '../features/compose/containers/donate_box_container';\nimport initialState from '../initial_state';\nimport TopContainer from '../features/compose/containers/top_container';\nimport { connectChatStream, connectUserStream } from '../actions/streaming';\nimport { BrowserRouter } from 'react-router-dom';\n\nconst { localeData, messages } = getLocale();\naddLocaleData(localeData);\n\nconst store = configureStore();\n\nif (initialState) {\n  store.dispatch(hydrateStore(initialState));\n}\n\nexport default class StandaloneAccountContainer extends React.PureComponent {\n\n  static propTypes = {\n    accountId: PropTypes.string.isRequired,\n    locale: PropTypes.string.isRequired,\n    currentAccountId: PropTypes.string,\n    hashtag: PropTypes.string,\n    local: PropTypes.bool,\n    username: PropTypes.string,\n    avatar: PropTypes.string,\n    statusId: PropTypes.any,\n    pinned: PropTypes.any,\n    unpinned: PropTypes.any,\n  };\n\n  static defaultProps = {\n    local: !initialState.settings.known_fediverse,\n  };\n\n  componentDidMount() {\n    this.disconnect = store.dispatch(connectUserStream());\n    this.disconnectChat = store.dispatch(connectChatStream());\n    store.dispatch(expandNotifications());\n\n    store.dispatch(setupBrowserNotifications());\n    if (process.env.NODE_ENV === 'production') {\n      // avoid offline in dev mode because it's harder to debug, commeting out because this does not work for profile page and independent status page\n      // require('offline-plugin/runtime').install();\n      // store.dispatch(registerPushNotifications.register());\n    }\n  }\n\n  componentWillUnmount () {\n    if (this.disconnect) {\n      this.disconnect();\n      this.disconnectChat();\n      this.disconnect = null;\n      this.disconnectChat = null;\n    }\n  }\n\n  render () {\n    const { locale, username, accountId, avatar, statusId } = this.props;\n\n    let show_pinned = true;\n    if (window.location.pathname.slice(0, 2) === '/@') {\n      if (window.location.pathname.includes('/videos') ||\n        window.location.pathname.includes('/photos') ||\n        window.location.pathname.includes('/with_replies')) {\n        show_pinned = false;\n      }\n    }\n\n    const donate_box_container = document.getElementById('donate-modal-container');\n    if (donate_box_container) {\n      ReactDOM.render(\n        <DonateBoxContainer />,\n        donate_box_container,\n      );\n    }\n\n    const navigation_container = document.getElementById('brighteon-navigation');\n    const new_post_section     = document.getElementById('new-post-section');\n    const link_footer_node     = document.getElementById('link-footer');\n\n    return (\n      <IntlProvider locale={locale} messages={messages}>\n        <Provider store={store}>\n          <BrowserRouter>\n            <Fragment>\n              <div className='profile-timeline-container'>\n                {\n                  show_pinned ? (\n                    <>\n                      <AccountTimeline username={username} avatar={avatar} statusId={statusId} accountId={accountId} pinned />\n                      <AccountTimeline username={username} avatar={avatar} statusId={statusId} accountId={accountId} unpinned />\n                    </>\n                  ) : (\n                    <>\n                      <AccountTimeline username={username} avatar={avatar} statusId={statusId} accountId={accountId} />\n                    </>\n                  )\n                }\n              </div>\n\n              {\n                ReactDOM.createPortal(\n                  <ModalContainer />,\n                  document.getElementById('modal-container'),\n                )\n              }\n              {\n                navigation_container && ReactDOM.createPortal(\n                  <TopContainer />,\n                  navigation_container,\n                )\n              }\n              {\n                new_post_section && ReactDOM.createPortal(\n                  <NewPostModalHandler />,\n                  new_post_section,\n                )\n              }\n              {\n                link_footer_node && ReactDOM.createPortal(\n                  <LinkFooter />,\n                  link_footer_node,\n                )\n              }\n            </Fragment>\n          </BrowserRouter>\n        </Provider>\n      </IntlProvider>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { EmojiPicker as EmojiPickerAsync } from 'brighteon/features/ui/util/async-components';\nimport Overlay from 'react-overlays/lib/Overlay';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { supportsPassiveEvents } from 'detect-passive-events';\nimport { buildCustomEmojis, categoriesFromEmojis } from 'brighteon/features/emoji/emoji';\n\nconst messages = defineMessages({\n  emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' },\n  emoji_search: { id: 'emoji_button.search', defaultMessage: 'Search...' },\n  emoji_not_found: { id: 'emoji_button.not_found', defaultMessage: 'No emojos!! (╯°□°)╯︵ ┻━┻' },\n  custom: { id: 'emoji_button.custom', defaultMessage: 'Custom' },\n  recent: { id: 'emoji_button.recent', defaultMessage: 'Frequently used' },\n  search_results: { id: 'emoji_button.search_results', defaultMessage: 'Search results' },\n  people: { id: 'emoji_button.people', defaultMessage: 'People' },\n  nature: { id: 'emoji_button.nature', defaultMessage: 'Nature' },\n  food: { id: 'emoji_button.food', defaultMessage: 'Food & Drink' },\n  activity: { id: 'emoji_button.activity', defaultMessage: 'Activity' },\n  travel: { id: 'emoji_button.travel', defaultMessage: 'Travel & Places' },\n  objects: { id: 'emoji_button.objects', defaultMessage: 'Objects' },\n  symbols: { id: 'emoji_button.symbols', defaultMessage: 'Symbols' },\n  flags: { id: 'emoji_button.flags', defaultMessage: 'Flags' },\n});\n\nconst assetHost = process.env.CDN_HOST || '';\nlet EmojiPicker, Emoji; // load asynchronously\n\nconst backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`;\nconst listenerOptions = supportsPassiveEvents ? { passive: true } : false;\n\nclass ModifierPickerMenu extends React.PureComponent {\n\n  static propTypes = {\n    active: PropTypes.bool,\n    onSelect: PropTypes.func.isRequired,\n    onClose: PropTypes.func.isRequired,\n  };\n\n  handleClick = e => {\n    this.props.onSelect(e.currentTarget.getAttribute('data-index') * 1);\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if (nextProps.active) {\n      this.attachListeners();\n    } else {\n      this.removeListeners();\n    }\n  }\n\n  componentWillUnmount() {\n    this.removeListeners();\n  }\n\n  handleDocumentClick = e => {\n    if (this.node && !this.node.contains(e.target)) {\n      this.props.onClose();\n    }\n  }\n\n  attachListeners() {\n    document.addEventListener('click', this.handleDocumentClick, false);\n    document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);\n  }\n\n  removeListeners() {\n    document.removeEventListener('click', this.handleDocumentClick, false);\n    document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);\n  }\n\n  setRef = c => {\n    this.node = c;\n  }\n\n  render() {\n    const { active } = this.props;\n\n    return (\n      <div className='emoji-picker-dropdown__modifiers__menu' style={{ display: active ? 'block' : 'none' }} ref={this.setRef}>\n        <button onClick={this.handleClick} data-index={1}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={1} backgroundImageFn={backgroundImageFn} /></button>\n        <button onClick={this.handleClick} data-index={2}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={2} backgroundImageFn={backgroundImageFn} /></button>\n        <button onClick={this.handleClick} data-index={3}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={3} backgroundImageFn={backgroundImageFn} /></button>\n        <button onClick={this.handleClick} data-index={4}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={4} backgroundImageFn={backgroundImageFn} /></button>\n        <button onClick={this.handleClick} data-index={5}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={5} backgroundImageFn={backgroundImageFn} /></button>\n        <button onClick={this.handleClick} data-index={6}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={6} backgroundImageFn={backgroundImageFn} /></button>\n      </div>\n    );\n  }\n\n}\n\nclass ModifierPicker extends React.PureComponent {\n\n  static propTypes = {\n    active: PropTypes.bool,\n    modifier: PropTypes.number,\n    onChange: PropTypes.func,\n    onClose: PropTypes.func,\n    onOpen: PropTypes.func,\n  };\n\n  handleClick = () => {\n    if (this.props.active) {\n      this.props.onClose();\n    } else {\n      this.props.onOpen();\n    }\n  }\n\n  handleSelect = modifier => {\n    this.props.onChange(modifier);\n    this.props.onClose();\n  }\n\n  render() {\n    const { active, modifier } = this.props;\n\n    return (\n      <div className='emoji-picker-dropdown__modifiers'>\n        <Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={modifier} onClick={this.handleClick} backgroundImageFn={backgroundImageFn} />\n        <ModifierPickerMenu active={active} onSelect={this.handleSelect} onClose={this.props.onClose} />\n      </div>\n    );\n  }\n\n}\n\n@injectIntl\nclass EmojiPickerMenu extends React.PureComponent {\n\n  static propTypes = {\n    custom_emojis: ImmutablePropTypes.list,\n    frequentlyUsedEmojis: PropTypes.arrayOf(PropTypes.string),\n    loading: PropTypes.bool,\n    onClose: PropTypes.func.isRequired,\n    onPick: PropTypes.func.isRequired,\n    style: PropTypes.object,\n    placement: PropTypes.string,\n    arrowOffsetLeft: PropTypes.string,\n    arrowOffsetTop: PropTypes.string,\n    intl: PropTypes.object.isRequired,\n    skinTone: PropTypes.number.isRequired,\n    onSkinTone: PropTypes.func.isRequired,\n  };\n\n  static defaultProps = {\n    style: {},\n    loading: true,\n    frequentlyUsedEmojis: [],\n  };\n\n  state = {\n    modifierOpen: false,\n    placement: null,\n  };\n\n  handleDocumentClick = e => {\n    if (this.node && !this.node.contains(e.target)) {\n      this.props.onClose();\n    }\n  }\n\n  componentDidMount() {\n    document.addEventListener('click', this.handleDocumentClick, false);\n    document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('click', this.handleDocumentClick, false);\n    document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);\n  }\n\n  setRef = c => {\n    this.node = c;\n  }\n\n  getI18n = () => {\n    const { intl } = this.props;\n\n    return {\n      search: intl.formatMessage(messages.emoji_search),\n      notfound: intl.formatMessage(messages.emoji_not_found),\n      categories: {\n        search: intl.formatMessage(messages.search_results),\n        recent: intl.formatMessage(messages.recent),\n        people: intl.formatMessage(messages.people),\n        nature: intl.formatMessage(messages.nature),\n        foods: intl.formatMessage(messages.food),\n        activity: intl.formatMessage(messages.activity),\n        places: intl.formatMessage(messages.travel),\n        objects: intl.formatMessage(messages.objects),\n        symbols: intl.formatMessage(messages.symbols),\n        flags: intl.formatMessage(messages.flags),\n        custom: intl.formatMessage(messages.custom),\n      },\n    };\n  }\n\n  handleClick = (emoji, event) => {\n    if (!emoji.native) {\n      emoji.native = emoji.colons;\n    }\n    if (!(event.ctrlKey || event.metaKey)) {\n      this.props.onClose();\n    }\n    this.props.onPick(emoji);\n  }\n\n  handleModifierOpen = () => {\n    this.setState({ modifierOpen: true });\n  }\n\n  handleModifierClose = () => {\n    this.setState({ modifierOpen: false });\n  }\n\n  handleModifierChange = modifier => {\n    this.props.onSkinTone(modifier);\n  }\n\n  render() {\n    const { loading, style, intl, custom_emojis, skinTone, frequentlyUsedEmojis } = this.props;\n    if (style.top === 0) {\n      style.top = window.pageYOffset;\n    }\n\n    if (loading) {\n      return <div style={{ width: 299 }} />;\n    }\n\n    const title = intl.formatMessage(messages.emoji);\n\n    const { modifierOpen } = this.state;\n\n    const categoriesSort = [\n      'recent',\n      'people',\n      'nature',\n      'foods',\n      'activity',\n      'places',\n      'objects',\n      'symbols',\n      'flags',\n    ];\n\n    categoriesSort.splice(1, 0, ...Array.from(categoriesFromEmojis(custom_emojis)).sort());\n\n    return (\n      <div className={classNames('emoji-picker-dropdown__menu', { selecting: modifierOpen })} style={style} ref={this.setRef}>\n        <EmojiPicker\n          perLine={8}\n          emojiSize={22}\n          sheetSize={32}\n          custom={buildCustomEmojis(custom_emojis)}\n          color=''\n          emoji=''\n          set='twitter'\n          title={title}\n          i18n={this.getI18n()}\n          onClick={this.handleClick}\n          include={categoriesSort}\n          recent={frequentlyUsedEmojis}\n          skin={skinTone}\n          showPreview={false}\n          backgroundImageFn={backgroundImageFn}\n          autoFocus\n          emojiTooltip\n        />\n\n        <ModifierPicker\n          active={modifierOpen}\n          modifier={skinTone}\n          onOpen={this.handleModifierOpen}\n          onClose={this.handleModifierClose}\n          onChange={this.handleModifierChange}\n        />\n      </div>\n    );\n  }\n\n}\n\nexport default @injectIntl\nclass EmojiPickerDropdown extends React.PureComponent {\n\n  static propTypes = {\n    custom_emojis: ImmutablePropTypes.list,\n    frequentlyUsedEmojis: PropTypes.arrayOf(PropTypes.string),\n    intl: PropTypes.object.isRequired,\n    onPickEmoji: PropTypes.func.isRequired,\n    onSkinTone: PropTypes.func.isRequired,\n    skinTone: PropTypes.number.isRequired,\n    button: PropTypes.node,\n    onFocus: PropTypes.func.isRequired,\n  };\n\n  state = {\n    active: false,\n    loading: false,\n  };\n\n  setRef = (c) => {\n    this.dropdown = c;\n  }\n\n  onShowDropdown = ({ target }) => {\n    this.setState({ active: true });\n\n    if (!EmojiPicker) {\n      this.setState({ loading: true });\n\n      EmojiPickerAsync().then(EmojiMart => {\n        EmojiPicker = EmojiMart.Picker;\n        Emoji = EmojiMart.Emoji;\n\n        this.setState({ loading: false });\n      }).catch(() => {\n        this.setState({ loading: false, active: false });\n      });\n    }\n\n    const { top } = target.getBoundingClientRect();\n    this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });\n  }\n\n  onHideDropdown = () => {\n    this.setState({ active: false });\n  }\n\n  onToggle = (e) => {\n    this.props.onFocus();\n    if (!this.state.loading && (!e.key || e.key === 'Enter')) {\n      if (this.state.active) {\n        this.onHideDropdown();\n      } else {\n        this.onShowDropdown(e);\n      }\n    }\n  }\n\n  handleKeyDown = e => {\n    if (e.key === 'Escape') {\n      this.onHideDropdown();\n    }\n  }\n\n  setTargetRef = c => {\n    this.target = c;\n  }\n\n  findTarget = () => {\n    return this.target;\n  }\n\n  render() {\n    const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis, button } = this.props;\n    const title = intl.formatMessage(messages.emoji);\n    const { active, loading, placement } = this.state;\n\n    return (\n      <div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}>\n        <div ref={this.setTargetRef} className='emoji-button' title={title} aria-label={title} aria-expanded={active} role='button' onClick={this.onToggle} onKeyDown={this.onToggle} tabIndex={0}>\n          {button || <img\n            className={classNames('emojione', { 'pulse-loading': active && loading })}\n            alt='🙂'\n            src={`${assetHost}/emoji/1f602.svg`}\n          />}\n        </div>\n\n        <Overlay show={active} placement={placement} target={this.findTarget}>\n          <EmojiPickerMenu\n            custom_emojis={this.props.custom_emojis}\n            loading={loading}\n            onClose={this.onHideDropdown}\n            onPick={onPickEmoji}\n            onSkinTone={onSkinTone}\n            skinTone={skinTone}\n            frequentlyUsedEmojis={frequentlyUsedEmojis}\n          />\n        </Overlay>\n      </div>\n    );\n  }\n\n}\n"],"sourceRoot":""}