1 line
No EOL
34 KiB
Text
1 line
No EOL
34 KiB
Text
{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/notifications/components/notification.js","webpack:///./app/javascript/mastodon/features/notifications/containers/notification_container.js","webpack:///./app/javascript/mastodon/features/notifications/components/clear_column_button.js","webpack:///./app/javascript/mastodon/features/notifications/components/column_settings.js","webpack:///./app/javascript/mastodon/features/notifications/containers/column_settings_container.js","webpack:///./app/javascript/mastodon/features/notifications/index.js"],"names":["notificationForScreenReader","intl","message","timestamp","output","push","formatDate","hour","minute","month","day","join","notification_Notification","Object","index_es","handleMoveUp","_this$props","_this","props","notification","onMoveUp","get","handleMoveDown","_this$props2","onMoveDown","handleOpen","context","router","history","handleOpenProfile","getIn","handleMention","e","preventDefault","_this$props3","onMention","getHandlers","moveUp","this","moveDown","open","openProfile","mention","reply","renderFollow","account","link","jsx_default","lib","handlers","className","tabIndex","aria-label","formatMessage","id","defaultMessage","name","values","account_container","withNote","hidden","renderMention","status_container","withDismiss","contextType","renderFavourite","muted","renderReblog","render","displayNameHtml","__html","permalink","href","title","to","dangerouslySetInnerHTML","react_immutable_pure_component_es","contextTypes","prop_types_default","a","object","propTypes","ImmutablePropTypes_default","map","isRequired","bool","func","notification_container","es","getNotification","selectors","state","accountId","dispatch","compose","clear_column_button_ClearColumnButton","onClick","react_default","PureComponent","column_settings_ColumnSettings","onPushChange","path","checked","onChange","concat","_props","settings","pushSettings","onClear","alertStr","showStr","soundStr","showPushSettings","pushStr","pushMeta","role","aria-labelledby","setting_toggle","prefix","settingPath","label","meta","messages","clearMessage","clearConfirm","column_settings_container","_ref","push_notifications","slice","actions_settings","modal","confirm","onConfirm","actions_notifications","notifications_messages","getNotifications","reselect_lib","immutable","filter","item","keys","excludedTypes","notifications","filterNot","includes","notifications_Notifications","isLoading","isUnread","hasMore","handleLoadGap","maxId","handleLoadOlder","debounce_default","last","leading","handleScrollToTop","handleScroll","handlePin","columnId","columns","handleMove","dir","handleHeaderClick","column","scrollTop","setColumnRef","c","elementIndex","findIndex","_selectChild","componentWillUnmount","cancel","index","element","node","querySelector","focus","_this2","shouldUpdateScroll","multiColumn","pinned","emptyMessage","scrollableContent","size","load_gap","disabled","scrollContainer","scrollable_list","scrollKey","trackScroll","onLoadMore","onScrollToTop","onScroll","createElement","ref","column_header","icon","active","onPin","onMove","defaultProps"],"mappings":"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","file":"features/notifications.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport StatusContainer from '../../../containers/status_container';\nimport AccountContainer from '../../../containers/account_container';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport Permalink from '../../../components/permalink';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\n\nconst notificationForScreenReader = (intl, message, timestamp) => {\n const output = [message];\n\n output.push(intl.formatDate(timestamp, { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }));\n\n return output.join(', ');\n};\n\n@injectIntl\nexport default class Notification extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n notification: ImmutablePropTypes.map.isRequired,\n hidden: PropTypes.bool,\n onMoveUp: PropTypes.func.isRequired,\n onMoveDown: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleMoveUp = () => {\n const { notification, onMoveUp } = this.props;\n onMoveUp(notification.get('id'));\n }\n\n handleMoveDown = () => {\n const { notification, onMoveDown } = this.props;\n onMoveDown(notification.get('id'));\n }\n\n handleOpen = () => {\n const { notification } = this.props;\n\n if (notification.get('status')) {\n this.context.router.history.push(`/statuses/${notification.get('status')}`);\n } else {\n this.handleOpenProfile();\n }\n }\n\n handleOpenProfile = () => {\n const { notification } = this.props;\n this.context.router.history.push(`/accounts/${notification.getIn(['account', 'id'])}`);\n }\n\n handleMention = e => {\n e.preventDefault();\n\n const { notification, onMention } = this.props;\n onMention(notification.get('account'), this.context.router.history);\n }\n\n getHandlers () {\n return {\n moveUp: this.handleMoveUp,\n moveDown: this.handleMoveDown,\n open: this.handleOpen,\n openProfile: this.handleOpenProfile,\n mention: this.handleMention,\n reply: this.handleMention,\n };\n }\n\n renderFollow (notification, account, link) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-follow focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.follow', defaultMessage: '{name} followed you' }, { name: account.get('acct') }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <i className='fa fa-fw fa-user-plus' />\n </div>\n\n <FormattedMessage id='notification.follow' defaultMessage='{name} followed you' values={{ name: link }} />\n </div>\n\n <AccountContainer id={account.get('id')} withNote={false} hidden={this.props.hidden} />\n </div>\n </HotKeys>\n );\n }\n\n renderMention (notification) {\n return (\n <StatusContainer\n id={notification.get('status')}\n withDismiss\n hidden={this.props.hidden}\n onMoveDown={this.handleMoveDown}\n onMoveUp={this.handleMoveUp}\n contextType='notifications'\n />\n );\n }\n\n renderFavourite (notification, link) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-favourite focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.favourite', defaultMessage: '{name} favourited your status' }, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <i className='fa fa-fw fa-star star-icon' />\n </div>\n <FormattedMessage id='notification.favourite' defaultMessage='{name} favourited your status' values={{ name: link }} />\n </div>\n\n <StatusContainer id={notification.get('status')} account={notification.get('account')} muted withDismiss hidden={!!this.props.hidden} />\n </div>\n </HotKeys>\n );\n }\n\n renderReblog (notification, link) {\n const { intl } = this.props;\n\n return (\n <HotKeys handlers={this.getHandlers()}>\n <div className='notification notification-reblog focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.reblog', defaultMessage: '{name} boosted your status' }, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>\n <div className='notification__message'>\n <div className='notification__favourite-icon-wrapper'>\n <i className='fa fa-fw fa-retweet' />\n </div>\n <FormattedMessage id='notification.reblog' defaultMessage='{name} boosted your status' values={{ name: link }} />\n </div>\n\n <StatusContainer id={notification.get('status')} account={notification.get('account')} muted withDismiss hidden={this.props.hidden} />\n </div>\n </HotKeys>\n );\n }\n\n render () {\n const { notification } = this.props;\n const account = notification.get('account');\n const displayNameHtml = { __html: account.get('display_name_html') };\n const link = <bdi><Permalink className='notification__display-name' href={account.get('url')} title={account.get('acct')} to={`/accounts/${account.get('id')}`} dangerouslySetInnerHTML={displayNameHtml} /></bdi>;\n\n switch(notification.get('type')) {\n case 'follow':\n return this.renderFollow(notification, account, link);\n case 'mention':\n return this.renderMention(notification);\n case 'favourite':\n return this.renderFavourite(notification, link);\n case 'reblog':\n return this.renderReblog(notification, link);\n }\n\n return null;\n }\n\n}\n","import { connect } from 'react-redux';\nimport { makeGetNotification } from '../../../selectors';\nimport Notification from '../components/notification';\nimport { mentionCompose } from '../../../actions/compose';\n\nconst makeMapStateToProps = () => {\n const getNotification = makeGetNotification();\n\n const mapStateToProps = (state, props) => ({\n notification: getNotification(state, props.notification, props.accountId),\n });\n\n return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n onMention: (account, router) => {\n dispatch(mentionCompose(account, router));\n },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(Notification);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class ClearColumnButton extends React.PureComponent {\n\n static propTypes = {\n onClick: PropTypes.func.isRequired,\n };\n\n render () {\n return (\n <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.props.onClick}><i className='fa fa-eraser' /> <FormattedMessage id='notifications.clear' defaultMessage='Clear notifications' /></button>\n );\n }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { FormattedMessage } from 'react-intl';\nimport ClearColumnButton from './clear_column_button';\nimport SettingToggle from './setting_toggle';\n\nexport default class ColumnSettings extends React.PureComponent {\n\n static propTypes = {\n settings: ImmutablePropTypes.map.isRequired,\n pushSettings: ImmutablePropTypes.map.isRequired,\n onChange: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n };\n\n onPushChange = (path, checked) => {\n this.props.onChange(['push', ...path], checked);\n }\n\n render () {\n const { settings, pushSettings, onChange, onClear } = this.props;\n\n const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />;\n const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />;\n const soundStr = <FormattedMessage id='notifications.column_settings.sound' defaultMessage='Play sound' />;\n\n const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed');\n const pushStr = showPushSettings && <FormattedMessage id='notifications.column_settings.push' defaultMessage='Push notifications' />;\n const pushMeta = showPushSettings && <FormattedMessage id='notifications.column_settings.push_meta' defaultMessage='This device' />;\n\n return (\n <div>\n <div className='column-settings__row'>\n <ClearColumnButton onClick={onClear} />\n </div>\n\n <div role='group' aria-labelledby='notifications-follow'>\n <span id='notifications-follow' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow' defaultMessage='New followers:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-favourite'>\n <span id='notifications-favourite' className='column-settings__section'><FormattedMessage id='notifications.column_settings.favourite' defaultMessage='Favourites:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'favourite']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'favourite']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'favourite']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-mention'>\n <span id='notifications-mention' className='column-settings__section'><FormattedMessage id='notifications.column_settings.mention' defaultMessage='Mentions:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'mention']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'mention']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'mention']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n\n <div role='group' aria-labelledby='notifications-reblog'>\n <span id='notifications-reblog' className='column-settings__section'><FormattedMessage id='notifications.column_settings.reblog' defaultMessage='Boosts:' /></span>\n\n <div className='column-settings__row'>\n <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} />\n {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'reblog']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />}\n <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={showStr} />\n <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'reblog']} onChange={onChange} label={soundStr} />\n </div>\n </div>\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ColumnSettings from '../components/column_settings';\nimport { changeSetting } from '../../../actions/settings';\nimport { clearNotifications } from '../../../actions/notifications';\nimport { changeAlerts as changePushNotifications } from '../../../actions/push_notifications';\nimport { openModal } from '../../../actions/modal';\n\nconst messages = defineMessages({\n clearMessage: { id: 'notifications.clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all your notifications?' },\n clearConfirm: { id: 'notifications.clear', defaultMessage: 'Clear notifications' },\n});\n\nconst mapStateToProps = state => ({\n settings: state.getIn(['settings', 'notifications']),\n pushSettings: state.get('push_notifications'),\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n onChange (path, checked) {\n if (path[0] === 'push') {\n dispatch(changePushNotifications(path.slice(1), checked));\n } else {\n dispatch(changeSetting(['notifications', ...path], checked));\n }\n },\n\n onClear () {\n dispatch(openModal('CONFIRM', {\n message: intl.formatMessage(messages.clearMessage),\n confirm: intl.formatMessage(messages.clearConfirm),\n onConfirm: () => dispatch(clearNotifications()),\n }));\n },\n\n});\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ColumnSettings));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Column from '../../components/column';\nimport ColumnHeader from '../../components/column_header';\nimport { expandNotifications, scrollTopNotifications } from '../../actions/notifications';\nimport { addColumn, removeColumn, moveColumn } from '../../actions/columns';\nimport NotificationContainer from './containers/notification_container';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ColumnSettingsContainer from './containers/column_settings_container';\nimport { createSelector } from 'reselect';\nimport { List as ImmutableList } from 'immutable';\nimport { debounce } from 'lodash';\nimport ScrollableList from '../../components/scrollable_list';\nimport LoadGap from '../../components/load_gap';\n\nconst messages = defineMessages({\n title: { id: 'column.notifications', defaultMessage: 'Notifications' },\n});\n\nconst getNotifications = createSelector([\n state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()),\n state => state.getIn(['notifications', 'items']),\n], (excludedTypes, notifications) => notifications.filterNot(item => item !== null && excludedTypes.includes(item.get('type'))));\n\nconst mapStateToProps = state => ({\n notifications: getNotifications(state),\n isLoading: state.getIn(['notifications', 'isLoading'], true),\n isUnread: state.getIn(['notifications', 'unread']) > 0,\n hasMore: state.getIn(['notifications', 'hasMore']),\n});\n\n@connect(mapStateToProps)\n@injectIntl\nexport default class Notifications extends React.PureComponent {\n\n static propTypes = {\n columnId: PropTypes.string,\n notifications: ImmutablePropTypes.list.isRequired,\n dispatch: PropTypes.func.isRequired,\n shouldUpdateScroll: PropTypes.func,\n intl: PropTypes.object.isRequired,\n isLoading: PropTypes.bool,\n isUnread: PropTypes.bool,\n multiColumn: PropTypes.bool,\n hasMore: PropTypes.bool,\n };\n\n static defaultProps = {\n trackScroll: true,\n };\n\n componentWillUnmount () {\n this.handleLoadOlder.cancel();\n this.handleScrollToTop.cancel();\n this.handleScroll.cancel();\n this.props.dispatch(scrollTopNotifications(false));\n }\n\n handleLoadGap = (maxId) => {\n this.props.dispatch(expandNotifications({ maxId }));\n };\n\n handleLoadOlder = debounce(() => {\n const last = this.props.notifications.last();\n this.props.dispatch(expandNotifications({ maxId: last && last.get('id') }));\n }, 300, { leading: true });\n\n handleScrollToTop = debounce(() => {\n this.props.dispatch(scrollTopNotifications(true));\n }, 100);\n\n handleScroll = debounce(() => {\n this.props.dispatch(scrollTopNotifications(false));\n }, 100);\n\n handlePin = () => {\n const { columnId, dispatch } = this.props;\n\n if (columnId) {\n dispatch(removeColumn(columnId));\n } else {\n dispatch(addColumn('NOTIFICATIONS', {}));\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 setColumnRef = c => {\n this.column = c;\n }\n\n handleMoveUp = id => {\n const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) - 1;\n this._selectChild(elementIndex);\n }\n\n handleMoveDown = id => {\n const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) + 1;\n this._selectChild(elementIndex);\n }\n\n _selectChild (index) {\n const element = this.column.node.querySelector(`article:nth-of-type(${index + 1}) .focusable`);\n\n if (element) {\n element.focus();\n }\n }\n\n render () {\n const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore } = this.props;\n const pinned = !!columnId;\n const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage=\"You don't have any notifications yet. Interact with others to start the conversation.\" />;\n\n let scrollableContent = null;\n\n if (isLoading && this.scrollableContent) {\n scrollableContent = this.scrollableContent;\n } else if (notifications.size > 0 || hasMore) {\n scrollableContent = notifications.map((item, index) => item === null ? (\n <LoadGap\n key={'gap:' + notifications.getIn([index + 1, 'id'])}\n disabled={isLoading}\n maxId={index > 0 ? notifications.getIn([index - 1, 'id']) : null}\n onClick={this.handleLoadGap}\n />\n ) : (\n <NotificationContainer\n key={item.get('id')}\n notification={item}\n accountId={item.get('account')}\n onMoveUp={this.handleMoveUp}\n onMoveDown={this.handleMoveDown}\n />\n ));\n } else {\n scrollableContent = null;\n }\n\n this.scrollableContent = scrollableContent;\n\n const scrollContainer = (\n <ScrollableList\n scrollKey={`notifications-${columnId}`}\n trackScroll={!pinned}\n isLoading={isLoading}\n hasMore={hasMore}\n emptyMessage={emptyMessage}\n onLoadMore={this.handleLoadOlder}\n onScrollToTop={this.handleScrollToTop}\n onScroll={this.handleScroll}\n shouldUpdateScroll={shouldUpdateScroll}\n >\n {scrollableContent}\n </ScrollableList>\n );\n\n return (\n <Column ref={this.setColumnRef} label={intl.formatMessage(messages.title)}>\n <ColumnHeader\n icon='bell'\n active={isUnread}\n title={intl.formatMessage(messages.title)}\n onPin={this.handlePin}\n onMove={this.handleMove}\n onClick={this.handleHeaderClick}\n pinned={pinned}\n multiColumn={multiColumn}\n >\n <ColumnSettingsContainer />\n </ColumnHeader>\n\n {scrollContainer}\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} |