{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/home_timeline/components/column_settings.js","webpack:///./app/javascript/mastodon/features/home_timeline/containers/column_settings_container.js","webpack:///./app/javascript/mastodon/features/getting_started/components/announcements.js","webpack:///./app/javascript/mastodon/features/getting_started/containers/announcements_container.js","webpack:///./app/javascript/mastodon/features/home_timeline/index.js"],"names":["ColumnSettings","injectIntl","React","PureComponent","render","settings","onChange","this","props","className","id","defaultMessage","prefix","settingPath","label","connect","state","getIn","dispatch","key","checked","changeSetting","onSave","saveSettings","messages","defineMessages","close","previous","next","Content","ImmutablePureComponent","setRef","c","node","onMentionClick","mention","e","context","router","button","ctrlKey","metaKey","preventDefault","history","push","get","onHashtagClick","hashtag","replace","onStatusClick","status","handleMouseEnter","currentTarget","autoPlayGif","emojis","querySelectorAll","i","length","emoji","src","getAttribute","handleMouseLeave","componentDidMount","_updateLinks","componentDidUpdate","links","link","classList","contains","add","announcement","find","item","href","addEventListener","bind","setAttribute","textContent","previousSibling","text","ref","dangerouslySetInnerHTML","__html","onMouseEnter","onMouseLeave","contextTypes","PropTypes","object","propTypes","ImmutablePropTypes","map","isRequired","Emoji","emojiMap","hovered","unicodeMapping","filename","shortCode","title","draggable","alt","assetHost","Reaction","handleClick","reaction","announcementId","addReaction","removeReaction","setState","classNames","active","onClick","style","value","string","func","ReactionsBar","handleEmojiPick","data","native","willEnter","scale","reduceMotion","willLeave","spring","stiffness","damping","reactions","visibleReactions","filter","x","styles","toArray","items","isEmpty","transform","position","size","onPickEmoji","list","Announcement","unread","selected","startsAt","Date","endsAt","now","hasTimeRange","skipYear","getFullYear","skipEndDate","getDate","getMonth","skipTime","hour12","year","undefined","month","day","hour","minute","intl","bool","Announcements","index","handleChangeIndex","announcements","handleNextClick","handlePrevClick","static","_markAnnouncementAsRead","dismissAnnouncement","mascot","elephantUIPlane","animateHeight","adjustHeight","onChangeIndex","idx","disabled","disableSwiping","reverse","formatMessage","icon","customEmojiMap","createSelector","reduce","set","ImmutableMap","name","show_announcements","hide_announcements","HomeTimeline","hasUnread","isPartial","hasAnnouncements","unreadAnnouncements","count","showAnnouncements","handlePin","columnId","removeColumn","addColumn","handleMove","dir","moveColumn","handleHeaderClick","column","scrollTop","handleLoadMore","maxId","expandHomeTimeline","handleToggleAnnouncementsClick","stopPropagation","toggleShowAnnouncements","setTimeout","fetchAnnouncements","_checkIfReloadNeeded","prevProps","componentWillUnmount","_stopPolling","wasPartial","polling","setInterval","clearInterval","multiColumn","pinned","signedIn","identity","announcementsButton","type","bindToDocument","onPin","onMove","extraButton","appendContent","trackScroll","scrollKey","onLoadMore","timelineId","emptyMessage","values","suggestions","Link","to","Helmet","content"],"mappings":"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","file":"js/features/home_timeline-277b92efb3d1f64c66fe.chunk.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport SettingToggle from '../../notifications/components/setting_toggle';\n\nexport default @injectIntl\nclass ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { settings, onChange } = this.props;\n\n return (\n
\n \n\n
\n } />\n
\n\n
\n } />\n
\n
\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting, saveSettings } from '../../../actions/settings';\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'home']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n onChange (key, checked) {\n dispatch(changeSetting(['home', ...key], checked));\n },\n\n onSave () {\n dispatch(saveSettings());\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings);\n","import React from 'react';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ReactSwipeableViews from 'react-swipeable-views';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport IconButton from 'mastodon/components/icon_button';\nimport Icon from 'mastodon/components/icon';\nimport { defineMessages, injectIntl, FormattedMessage, FormattedDate } from 'react-intl';\nimport { autoPlayGif, reduceMotion, disableSwiping } from 'mastodon/initial_state';\nimport elephantUIPlane from 'mastodon/../images/elephant_ui_plane.svg';\nimport { mascot } from 'mastodon/initial_state';\nimport unicodeMapping from 'mastodon/features/emoji/emoji_unicode_mapping_light';\nimport classNames from 'classnames';\nimport EmojiPickerDropdown from 'mastodon/features/compose/containers/emoji_picker_dropdown_container';\nimport AnimatedNumber from 'mastodon/components/animated_number';\nimport TransitionMotion from 'react-motion/lib/TransitionMotion';\nimport spring from 'react-motion/lib/spring';\nimport { assetHost } from 'mastodon/utils/config';\n\nconst messages = defineMessages({\n close: { id: 'lightbox.close', defaultMessage: 'Close' },\n previous: { id: 'lightbox.previous', defaultMessage: 'Previous' },\n next: { id: 'lightbox.next', defaultMessage: 'Next' },\n});\n\nclass Content extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n announcement: ImmutablePropTypes.map.isRequired,\n };\n\n setRef = c => {\n this.node = c;\n };\n\n componentDidMount () {\n this._updateLinks();\n }\n\n componentDidUpdate () {\n this._updateLinks();\n }\n\n _updateLinks () {\n const node = this.node;\n\n if (!node) {\n return;\n }\n\n const links = node.querySelectorAll('a');\n\n for (var i = 0; i < links.length; ++i) {\n let link = links[i];\n\n if (link.classList.contains('status-link')) {\n continue;\n }\n\n link.classList.add('status-link');\n\n let mention = this.props.announcement.get('mentions').find(item => link.href === item.get('url'));\n\n if (mention) {\n link.addEventListener('click', this.onMentionClick.bind(this, mention), false);\n link.setAttribute('title', mention.get('acct'));\n } else if (link.textContent[0] === '#' || (link.previousSibling && link.previousSibling.textContent && link.previousSibling.textContent[link.previousSibling.textContent.length - 1] === '#')) {\n link.addEventListener('click', this.onHashtagClick.bind(this, link.text), false);\n } else {\n let status = this.props.announcement.get('statuses').find(item => link.href === item.get('url'));\n if (status) {\n link.addEventListener('click', this.onStatusClick.bind(this, status), false);\n }\n link.setAttribute('title', link.href);\n link.classList.add('unhandled-link');\n }\n\n link.setAttribute('target', '_blank');\n link.setAttribute('rel', 'noopener noreferrer');\n }\n }\n\n onMentionClick = (mention, e) => {\n if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n this.context.router.history.push(`/@${mention.get('acct')}`);\n }\n };\n\n onHashtagClick = (hashtag, e) => {\n hashtag = hashtag.replace(/^#/, '');\n\n if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n this.context.router.history.push(`/tags/${hashtag}`);\n }\n };\n\n onStatusClick = (status, e) => {\n if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n this.context.router.history.push(`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`);\n }\n };\n\n handleMouseEnter = ({ currentTarget }) => {\n if (autoPlayGif) {\n return;\n }\n\n const emojis = currentTarget.querySelectorAll('.custom-emoji');\n\n for (var i = 0; i < emojis.length; i++) {\n let emoji = emojis[i];\n emoji.src = emoji.getAttribute('data-original');\n }\n };\n\n handleMouseLeave = ({ currentTarget }) => {\n if (autoPlayGif) {\n return;\n }\n\n const emojis = currentTarget.querySelectorAll('.custom-emoji');\n\n for (var i = 0; i < emojis.length; i++) {\n let emoji = emojis[i];\n emoji.src = emoji.getAttribute('data-static');\n }\n };\n\n render () {\n const { announcement } = this.props;\n\n return (\n \n );\n }\n\n}\n\nclass Emoji extends React.PureComponent {\n\n static propTypes = {\n emoji: PropTypes.string.isRequired,\n emojiMap: ImmutablePropTypes.map.isRequired,\n hovered: PropTypes.bool.isRequired,\n };\n\n render () {\n const { emoji, emojiMap, hovered } = this.props;\n\n if (unicodeMapping[emoji]) {\n const { filename, shortCode } = unicodeMapping[this.props.emoji];\n const title = shortCode ? `:${shortCode}:` : '';\n\n return (\n \n );\n } else if (emojiMap.get(emoji)) {\n const filename = (autoPlayGif || hovered) ? emojiMap.getIn([emoji, 'url']) : emojiMap.getIn([emoji, 'static_url']);\n const shortCode = `:${emoji}:`;\n\n return (\n \n );\n } else {\n return null;\n }\n }\n\n}\n\nclass Reaction extends ImmutablePureComponent {\n\n static propTypes = {\n announcementId: PropTypes.string.isRequired,\n reaction: ImmutablePropTypes.map.isRequired,\n addReaction: PropTypes.func.isRequired,\n removeReaction: PropTypes.func.isRequired,\n emojiMap: ImmutablePropTypes.map.isRequired,\n style: PropTypes.object,\n };\n\n state = {\n hovered: false,\n };\n\n handleClick = () => {\n const { reaction, announcementId, addReaction, removeReaction } = this.props;\n\n if (reaction.get('me')) {\n removeReaction(announcementId, reaction.get('name'));\n } else {\n addReaction(announcementId, reaction.get('name'));\n }\n };\n\n handleMouseEnter = () => this.setState({ hovered: true });\n\n handleMouseLeave = () => this.setState({ hovered: false });\n\n render () {\n const { reaction } = this.props;\n\n let shortCode = reaction.get('name');\n\n if (unicodeMapping[shortCode]) {\n shortCode = unicodeMapping[shortCode].shortCode;\n }\n\n return (\n \n );\n }\n\n}\n\nclass ReactionsBar extends ImmutablePureComponent {\n\n static propTypes = {\n announcementId: PropTypes.string.isRequired,\n reactions: ImmutablePropTypes.list.isRequired,\n addReaction: PropTypes.func.isRequired,\n removeReaction: PropTypes.func.isRequired,\n emojiMap: ImmutablePropTypes.map.isRequired,\n };\n\n handleEmojiPick = data => {\n const { addReaction, announcementId } = this.props;\n addReaction(announcementId, data.native.replace(/:/g, ''));\n };\n\n willEnter () {\n return { scale: reduceMotion ? 1 : 0 };\n }\n\n willLeave () {\n return { scale: reduceMotion ? 0 : spring(0, { stiffness: 170, damping: 26 }) };\n }\n\n render () {\n const { reactions } = this.props;\n const visibleReactions = reactions.filter(x => x.get('count') > 0);\n\n const styles = visibleReactions.map(reaction => ({\n key: reaction.get('name'),\n data: reaction,\n style: { scale: reduceMotion ? 1 : spring(1, { stiffness: 150, damping: 13 }) },\n })).toArray();\n\n return (\n \n {items => (\n
\n {items.map(({ key, data, style }) => (\n \n ))}\n\n {visibleReactions.size < 8 && } />}\n
\n )}\n
\n );\n }\n\n}\n\nclass Announcement extends ImmutablePureComponent {\n\n static propTypes = {\n announcement: ImmutablePropTypes.map.isRequired,\n emojiMap: ImmutablePropTypes.map.isRequired,\n addReaction: PropTypes.func.isRequired,\n removeReaction: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n selected: PropTypes.bool,\n };\n\n state = {\n unread: !this.props.announcement.get('read'),\n };\n\n componentDidUpdate () {\n const { selected, announcement } = this.props;\n if (!selected && this.state.unread !== !announcement.get('read')) {\n this.setState({ unread: !announcement.get('read') });\n }\n }\n\n render () {\n const { announcement } = this.props;\n const { unread } = this.state;\n const startsAt = announcement.get('starts_at') && new Date(announcement.get('starts_at'));\n const endsAt = announcement.get('ends_at') && new Date(announcement.get('ends_at'));\n const now = new Date();\n const hasTimeRange = startsAt && endsAt;\n const skipYear = hasTimeRange && startsAt.getFullYear() === endsAt.getFullYear() && endsAt.getFullYear() === now.getFullYear();\n const skipEndDate = hasTimeRange && startsAt.getDate() === endsAt.getDate() && startsAt.getMonth() === endsAt.getMonth() && startsAt.getFullYear() === endsAt.getFullYear();\n const skipTime = announcement.get('all_day');\n\n return (\n
\n \n \n {hasTimeRange && ยท - }\n \n\n \n\n \n\n {unread && }\n
\n );\n }\n\n}\n\nexport default @injectIntl\nclass Announcements extends ImmutablePureComponent {\n\n static propTypes = {\n announcements: ImmutablePropTypes.list,\n emojiMap: ImmutablePropTypes.map.isRequired,\n dismissAnnouncement: PropTypes.func.isRequired,\n addReaction: PropTypes.func.isRequired,\n removeReaction: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n state = {\n index: 0,\n };\n\n static getDerivedStateFromProps(props, state) {\n if (props.announcements.size > 0 && state.index >= props.announcements.size) {\n return { index: props.announcements.size - 1 };\n } else {\n return null;\n }\n }\n\n componentDidMount () {\n this._markAnnouncementAsRead();\n }\n\n componentDidUpdate () {\n this._markAnnouncementAsRead();\n }\n\n _markAnnouncementAsRead () {\n const { dismissAnnouncement, announcements } = this.props;\n const { index } = this.state;\n const announcement = announcements.get(announcements.size - 1 - index);\n if (!announcement.get('read')) dismissAnnouncement(announcement.get('id'));\n }\n\n handleChangeIndex = index => {\n this.setState({ index: index % this.props.announcements.size });\n };\n\n handleNextClick = () => {\n this.setState({ index: (this.state.index + 1) % this.props.announcements.size });\n };\n\n handlePrevClick = () => {\n this.setState({ index: (this.props.announcements.size + this.state.index - 1) % this.props.announcements.size });\n };\n\n render () {\n const { announcements, intl } = this.props;\n const { index } = this.state;\n\n if (announcements.isEmpty()) {\n return null;\n }\n\n return (\n
\n \n\n
\n \n {announcements.map((announcement, idx) => (\n \n )).reverse()}\n \n\n {announcements.size > 1 && (\n
\n \n {index + 1} / {announcements.size}\n \n
\n )}\n
\n
\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { addReaction, removeReaction, dismissAnnouncement } from 'mastodon/actions/announcements';\nimport Announcements from '../components/announcements';\nimport { createSelector } from 'reselect';\nimport { Map as ImmutableMap } from 'immutable';\n\nconst customEmojiMap = createSelector([state => state.get('custom_emojis')], items => items.reduce((map, emoji) => map.set(emoji.get('shortcode'), emoji), ImmutableMap()));\n\nconst mapStateToProps = state => ({\n announcements: state.getIn(['announcements', 'items']),\n emojiMap: customEmojiMap(state),\n});\n\nconst mapDispatchToProps = dispatch => ({\n dismissAnnouncement: id => dispatch(dismissAnnouncement(id)),\n addReaction: (id, name) => dispatch(addReaction(id, name)),\n removeReaction: (id, name) => dispatch(removeReaction(id, name)),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Announcements);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { expandHomeTimeline } from '../../actions/timelines';\nimport PropTypes from 'prop-types';\nimport StatusListContainer from '../ui/containers/status_list_container';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { Link } from 'react-router-dom';\nimport { fetchAnnouncements, toggleShowAnnouncements } from 'mastodon/actions/announcements';\nimport AnnouncementsContainer from 'mastodon/features/getting_started/containers/announcements_container';\nimport classNames from 'classnames';\nimport IconWithBadge from 'mastodon/components/icon_with_badge';\nimport NotSignedInIndicator from 'mastodon/components/not_signed_in_indicator';\nimport { Helmet } from 'react-helmet';\n\nconst messages = defineMessages({\n title: { id: 'column.home', defaultMessage: 'Home' },\n show_announcements: { id: 'home.show_announcements', defaultMessage: 'Show announcements' },\n hide_announcements: { id: 'home.hide_announcements', defaultMessage: 'Hide announcements' },\n});\n\nconst mapStateToProps = state => ({\n hasUnread: state.getIn(['timelines', 'home', 'unread']) > 0,\n isPartial: state.getIn(['timelines', 'home', 'isPartial']),\n hasAnnouncements: !state.getIn(['announcements', 'items']).isEmpty(),\n unreadAnnouncements: state.getIn(['announcements', 'items']).count(item => !item.get('read')),\n showAnnouncements: state.getIn(['announcements', 'show']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass HomeTimeline extends React.PureComponent {\n\n static contextTypes = {\n identity: PropTypes.object,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n hasUnread: PropTypes.bool,\n isPartial: PropTypes.bool,\n columnId: PropTypes.string,\n multiColumn: PropTypes.bool,\n hasAnnouncements: PropTypes.bool,\n unreadAnnouncements: PropTypes.number,\n showAnnouncements: PropTypes.bool,\n };\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('HOME', {}));\n }\n };\n\n handleMove = (dir) => {\n const { columnId, dispatch } = this.props;\n dispatch(moveColumn(columnId, dir));\n };\n\n handleHeaderClick = () => {\n this.column.scrollTop();\n };\n\n setRef = c => {\n this.column = c;\n };\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandHomeTimeline({ maxId }));\n };\n\n componentDidMount () {\n setTimeout(() => this.props.dispatch(fetchAnnouncements()), 700);\n this._checkIfReloadNeeded(false, this.props.isPartial);\n }\n\n componentDidUpdate (prevProps) {\n this._checkIfReloadNeeded(prevProps.isPartial, this.props.isPartial);\n }\n\n componentWillUnmount () {\n this._stopPolling();\n }\n\n _checkIfReloadNeeded (wasPartial, isPartial) {\n const { dispatch } = this.props;\n\n if (wasPartial === isPartial) {\n return;\n } else if (!wasPartial && isPartial) {\n this.polling = setInterval(() => {\n dispatch(expandHomeTimeline());\n }, 3000);\n } else if (wasPartial && !isPartial) {\n this._stopPolling();\n }\n }\n\n _stopPolling () {\n if (this.polling) {\n clearInterval(this.polling);\n this.polling = null;\n }\n }\n\n handleToggleAnnouncementsClick = (e) => {\n e.stopPropagation();\n this.props.dispatch(toggleShowAnnouncements());\n };\n\n render () {\n const { intl, hasUnread, columnId, multiColumn, hasAnnouncements, unreadAnnouncements, showAnnouncements } = this.props;\n const pinned = !!columnId;\n const { signedIn } = this.context.identity;\n\n let announcementsButton = null;\n\n if (hasAnnouncements) {\n announcementsButton = (\n \n \n \n );\n }\n\n return (\n \n }\n >\n \n \n\n {signedIn ? (\n }} />}\n bindToDocument={!multiColumn}\n />\n ) : }\n\n \n {intl.formatMessage(messages.title)}\n \n \n \n );\n }\n\n}\n"],"sourceRoot":""}