Merge branch 'docs_updating' into 'develop'
[akkoma] / priv / static / packs / features / notifications.js.map
index d3efa39b1c8dadd36defa7772f133d14a4bbed6c..e8cdefa151498df7ea07e9a7497f925c630d474d 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/notifications/components/notification.js","webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/notifications/containers/notification_container.js","webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/notifications/components/clear_column_button.js","webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/notifications/components/column_settings.js","webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/notifications/containers/column_settings_container.js","webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/notifications/components/filter_bar.js","webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js","webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/notifications/index.js"],"names":["notificationForScreenReader","intl","message","timestamp","output","push","formatDate","hour","minute","month","day","join","Notification","injectIntl","_this$props","_this","props","notification","onMoveUp","get","_this$props2","onMoveDown","context","router","history","handleOpenProfile","getIn","e","preventDefault","_this$props3","onMention","getHandlers","moveUp","this","handleMoveUp","moveDown","handleMoveDown","open","handleOpen","openProfile","mention","handleMention","reply","renderFollow","account","link","Object","jsx","react_hotkeys_index_es","handlers","className","tabIndex","aria-label","formatMessage","id","defaultMessage","name","title","index_es","values","account_container","withNote","hidden","renderMention","status_container","withDismiss","contextType","renderFavourite","muted","renderReblog","render","displayNameHtml","__html","permalink","href","to","dangerouslySetInnerHTML","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","isRequired","bool","func","connect","getNotification","makeGetNotification","state","accountId","dispatch","mentionCompose","ClearColumnButton","onClick","React","PureComponent","ColumnSettings","path","checked","onChange","concat","settings","pushSettings","onClear","filterShowStr","filterAdvancedStr","alertStr","showStr","soundStr","showPushSettings","pushStr","clear_column_button_ClearColumnButton","role","aria-labelledby","setting_toggle","prefix","settingPath","label","onPushChange","messages","defineMessages","clearMessage","clearConfirm","_ref","changePushNotifications","slice","changeSetting","setFilter","openModal","confirm","onConfirm","clearNotifications","tooltips","mentions","favourites","boosts","follows","FilterBar","notificationType","selectFilter","selectedFilter","advancedMode","newActiveFilter","getNotifications","createSelector","ImmutableList","filter","item","keys","showFilterBar","allowedType","excludedTypes","notifications","filterNot","includes","Notifications","isLoading","isUnread","hasMore","maxId","expandNotifications","debounce_default","last","leading","scrollTopNotifications","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","elementIndex","findIndex","_selectChild","componentWillUnmount","handleLoadOlder","cancel","handleScrollToTop","handleScroll","index","element","node","querySelector","focus","_this2","shouldUpdateScroll","multiColumn","pinned","emptyMessage","scrollableContent","filterBarContainer","filter_bar_container","size","load_gap","disabled","handleLoadGap","notification_container","scrollContainer","scrollable_list","scrollKey","trackScroll","showLoading","onLoadMore","onScrollToTop","onScroll","react_default","a","createElement","ref","setColumnRef","column_header","icon","active","onPin","handlePin","onMove","handleMove","handleHeaderClick","column_settings_container"],"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\nexport default @injectIntl\nclass 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            <span title={notification.get('created_at')}>\n              <FormattedMessage id='notification.follow' defaultMessage='{name} followed you' values={{ name: link }} />\n            </span>\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\n            <span title={notification.get('created_at')}>\n              <FormattedMessage id='notification.favourite' defaultMessage='{name} favourited your status' values={{ name: link }} />\n            </span>\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\n            <span title={notification.get('created_at')}>\n              <FormattedMessage id='notification.reblog' defaultMessage='{name} boosted your status' values={{ name: link }} />\n            </span>\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 filterShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show' defaultMessage='Show' />;\n    const filterAdvancedStr = <FormattedMessage id='notifications.column_settings.filter_bar.advanced' defaultMessage='Display all categories' />;\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\n    return (\n      <div>\n        <div className='column-settings__row'>\n          <ClearColumnButton onClick={onClear} />\n        </div>\n\n        <div role='group' aria-labelledby='notifications-filter-bar'>\n          <span id='notifications-filter-bar' className='column-settings__section'>\n            <FormattedMessage id='notifications.column_settings.filter_bar.category' defaultMessage='Quick filter bar' />\n          </span>\n          <div className='column-settings__row'>\n            <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'show']} onChange={onChange} label={filterShowStr} />\n            <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'advanced']} onChange={onChange} label={filterAdvancedStr} />\n          </div>\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']} 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']} 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']} 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']} 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 { setFilter } from '../../../actions/notifications';\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 if (path[0] === 'quickFilter') {\n      dispatch(changeSetting(['notifications', ...path], checked));\n      dispatch(setFilter('all'));\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 PropTypes from 'prop-types';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\n\nconst tooltips = defineMessages({\n  mentions: { id: 'notifications.filter.mentions', defaultMessage: 'Mentions' },\n  favourites: { id: 'notifications.filter.favourites', defaultMessage: 'Favourites' },\n  boosts: { id: 'notifications.filter.boosts', defaultMessage: 'Boosts' },\n  follows: { id: 'notifications.filter.follows', defaultMessage: 'Follows' },\n});\n\nexport default @injectIntl\nclass FilterBar extends React.PureComponent {\n\n  static propTypes = {\n    selectFilter: PropTypes.func.isRequired,\n    selectedFilter: PropTypes.string.isRequired,\n    advancedMode: PropTypes.bool.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  onClick (notificationType) {\n    return () => this.props.selectFilter(notificationType);\n  }\n\n  render () {\n    const { selectedFilter, advancedMode, intl } = this.props;\n    const renderedElement = !advancedMode ? (\n      <div className='notification__filter-bar'>\n        <button\n          className={selectedFilter === 'all' ? 'active' : ''}\n          onClick={this.onClick('all')}\n        >\n          <FormattedMessage\n            id='notifications.filter.all'\n            defaultMessage='All'\n          />\n        </button>\n        <button\n          className={selectedFilter === 'mention' ? 'active' : ''}\n          onClick={this.onClick('mention')}\n        >\n          <FormattedMessage\n            id='notifications.filter.mentions'\n            defaultMessage='Mentions'\n          />\n        </button>\n      </div>\n    ) : (\n      <div className='notification__filter-bar'>\n        <button\n          className={selectedFilter === 'all' ? 'active' : ''}\n          onClick={this.onClick('all')}\n        >\n          <FormattedMessage\n            id='notifications.filter.all'\n            defaultMessage='All'\n          />\n        </button>\n        <button\n          className={selectedFilter === 'mention' ? 'active' : ''}\n          onClick={this.onClick('mention')}\n          title={intl.formatMessage(tooltips.mentions)}\n        >\n          <i className='fa fa-fw fa-at' />\n        </button>\n        <button\n          className={selectedFilter === 'favourite' ? 'active' : ''}\n          onClick={this.onClick('favourite')}\n          title={intl.formatMessage(tooltips.favourites)}\n        >\n          <i className='fa fa-fw fa-star' />\n        </button>\n        <button\n          className={selectedFilter === 'reblog' ? 'active' : ''}\n          onClick={this.onClick('reblog')}\n          title={intl.formatMessage(tooltips.boosts)}\n        >\n          <i className='fa fa-fw fa-retweet' />\n        </button>\n        <button\n          className={selectedFilter === 'follow' ? 'active' : ''}\n          onClick={this.onClick('follow')}\n          title={intl.formatMessage(tooltips.follows)}\n        >\n          <i className='fa fa-fw fa-user-plus' />\n        </button>\n      </div>\n    );\n    return renderedElement;\n  }\n\n}\n","import { connect } from 'react-redux';\nimport FilterBar from '../components/filter_bar';\nimport { setFilter } from '../../../actions/notifications';\n\nconst makeMapStateToProps = state => ({\n  selectedFilter: state.getIn(['settings', 'notifications', 'quickFilter', 'active']),\n  advancedMode: state.getIn(['settings', 'notifications', 'quickFilter', 'advanced']),\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n  selectFilter (newActiveFilter) {\n    dispatch(setFilter(newActiveFilter));\n  },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(FilterBar);\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 FilterBarContainer from './containers/filter_bar_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 => state.getIn(['settings', 'notifications', 'quickFilter', 'show']),\n  state => state.getIn(['settings', 'notifications', 'quickFilter', 'active']),\n  state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()),\n  state => state.getIn(['notifications', 'items']),\n], (showFilterBar, allowedType, excludedTypes, notifications) => {\n  if (!showFilterBar || allowedType === 'all') {\n    // used if user changed the notification settings after loading the notifications from the server\n    // otherwise a list of notifications will come pre-filtered from the backend\n    // we need to turn it off for FilterBar in order not to block ourselves from seeing a specific category\n    return notifications.filterNot(item => item !== null && excludedTypes.includes(item.get('type')));\n  }\n  return notifications.filter(item => item !== null && allowedType === item.get('type'));\n});\n\nconst mapStateToProps = state => ({\n  showFilterBar: state.getIn(['settings', 'notifications', 'quickFilter', 'show']),\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\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Notifications extends React.PureComponent {\n\n  static propTypes = {\n    columnId: PropTypes.string,\n    notifications: ImmutablePropTypes.list.isRequired,\n    showFilterBar: PropTypes.bool.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, showFilterBar } = 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    const filterBarContainer = showFilterBar\n      ? (<FilterBarContainer />)\n      : 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        showLoading={isLoading && notifications.size === 0}\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        {filterBarContainer}\n        {scrollContainer}\n      </Column>\n    );\n  }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/notification.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/containers/notification_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/clear_column_button.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/column_settings.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/containers/column_settings_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/components/filter_bar.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/mastodon/features/notifications/index.js"],"names":["notificationForScreenReader","intl","message","timestamp","output","push","formatDate","hour","minute","month","day","join","Notification","injectIntl","props","notification","onMoveUp","get","onMoveDown","context","router","history","handleOpenProfile","getIn","e","preventDefault","onMention","status","onFavourite","onReblog","onToggleHidden","getHandlers","reply","this","handleMention","favourite","handleHotkeyFavourite","boost","handleHotkeyBoost","mention","open","handleOpen","openProfile","moveUp","handleMoveUp","moveDown","handleMoveDown","toggleHidden","handleHotkeyToggleHidden","renderFollow","account","link","handlers","className","tabIndex","aria-label","formatMessage","id","defaultMessage","name","fixedWidth","title","values","withNote","hidden","renderMention","withDismiss","contextType","getScrollPosition","updateScrollBottom","cachedMediaWidth","cacheMediaWidth","renderFavourite","muted","renderReblog","renderPoll","render","displayNameHtml","__html","href","to","dangerouslySetInnerHTML","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","isRequired","bool","func","number","connect","getNotification","makeGetNotification","getStatus","makeGetStatus","state","accountId","dispatch","mentionCompose","onModalReblog","reblog","unreblog","shiftKey","boostModal","openModal","unfavourite","revealStatus","hideStatus","ClearColumnButton","onClick","React","PureComponent","ColumnSettings","path","checked","onChange","settings","pushSettings","onClear","filterShowStr","filterAdvancedStr","alertStr","showStr","soundStr","showPushSettings","pushStr","role","aria-labelledby","prefix","settingPath","label","onPushChange","messages","defineMessages","clearMessage","clearConfirm","changePushNotifications","slice","changeSetting","setFilter","confirm","onConfirm","clearNotifications","tooltips","mentions","favourites","boosts","polls","follows","FilterBar","notificationType","selectFilter","selectedFilter","advancedMode","newActiveFilter","getNotifications","createSelector","ImmutableList","filter","item","keys","showFilterBar","allowedType","excludedTypes","notifications","filterNot","includes","Notifications","isLoading","isUnread","size","hasMore","numPending","maxId","expandNotifications","last","leading","loadPending","scrollTopNotifications","columnId","removeColumn","addColumn","dir","moveColumn","column","scrollTop","c","elementIndex","findIndex","_selectChild","componentWillMount","mountNotifications","componentWillUnmount","handleLoadOlder","cancel","handleScrollToTop","handleScroll","unmountNotifications","index","align_top","container","node","element","querySelector","offsetTop","scrollIntoView","clientHeight","offsetHeight","focus","shouldUpdateScroll","multiColumn","pinned","emptyMessage","scrollableContent","filterBarContainer","disabled","handleLoadGap","scrollContainer","scrollKey","trackScroll","showLoading","onLoadMore","onLoadPending","handleLoadPending","onScrollToTop","onScroll","bindToDocument","ref","setColumnRef","icon","active","onPin","handlePin","onMove","handleMove","handleHeaderClick"],"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';\nimport Icon from 'mastodon/components/icon';\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\nexport default @injectIntl\nclass 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    onFavourite: PropTypes.func.isRequired,\n    onReblog: PropTypes.func.isRequired,\n    onToggleHidden: PropTypes.func.isRequired,\n    status: ImmutablePropTypes.map,\n    intl: PropTypes.object.isRequired,\n    getScrollPosition: PropTypes.func,\n    updateScrollBottom: PropTypes.func,\n    cacheMediaWidth: PropTypes.func,\n    cachedMediaWidth: PropTypes.number,\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  handleHotkeyFavourite = () => {\n    const { status } = this.props;\n    if (status) this.props.onFavourite(status);\n  }\n\n  handleHotkeyBoost = e => {\n    const { status } = this.props;\n    if (status) this.props.onReblog(status, e);\n  }\n\n  handleHotkeyToggleHidden = () => {\n    const { status } = this.props;\n    if (status) this.props.onToggleHidden(status);\n  }\n\n  getHandlers () {\n    return {\n      reply: this.handleMention,\n      favourite: this.handleHotkeyFavourite,\n      boost: this.handleHotkeyBoost,\n      mention: this.handleMention,\n      open: this.handleOpen,\n      openProfile: this.handleOpenProfile,\n      moveUp: this.handleMoveUp,\n      moveDown: this.handleMoveDown,\n      toggleHidden: this.handleHotkeyToggleHidden,\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              <Icon id='user-plus' fixedWidth />\n            </div>\n\n            <span title={notification.get('created_at')}>\n              <FormattedMessage id='notification.follow' defaultMessage='{name} followed you' values={{ name: link }} />\n            </span>\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        getScrollPosition={this.props.getScrollPosition}\n        updateScrollBottom={this.props.updateScrollBottom}\n        cachedMediaWidth={this.props.cachedMediaWidth}\n        cacheMediaWidth={this.props.cacheMediaWidth}\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              <Icon id='star' className='star-icon' fixedWidth />\n            </div>\n\n            <span title={notification.get('created_at')}>\n              <FormattedMessage id='notification.favourite' defaultMessage='{name} favourited your status' values={{ name: link }} />\n            </span>\n          </div>\n\n          <StatusContainer\n            id={notification.get('status')}\n            account={notification.get('account')}\n            muted\n            withDismiss\n            hidden={!!this.props.hidden}\n            getScrollPosition={this.props.getScrollPosition}\n            updateScrollBottom={this.props.updateScrollBottom}\n            cachedMediaWidth={this.props.cachedMediaWidth}\n            cacheMediaWidth={this.props.cacheMediaWidth}\n          />\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              <Icon id='retweet' fixedWidth />\n            </div>\n\n            <span title={notification.get('created_at')}>\n              <FormattedMessage id='notification.reblog' defaultMessage='{name} boosted your status' values={{ name: link }} />\n            </span>\n          </div>\n\n          <StatusContainer\n            id={notification.get('status')}\n            account={notification.get('account')}\n            muted\n            withDismiss\n            hidden={this.props.hidden}\n            getScrollPosition={this.props.getScrollPosition}\n            updateScrollBottom={this.props.updateScrollBottom}\n            cachedMediaWidth={this.props.cachedMediaWidth}\n            cacheMediaWidth={this.props.cacheMediaWidth}\n          />\n        </div>\n      </HotKeys>\n    );\n  }\n\n  renderPoll (notification) {\n    const { intl } = this.props;\n\n    return (\n      <HotKeys handlers={this.getHandlers()}>\n        <div className='notification notification-poll focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.poll', defaultMessage: 'A poll you have voted in has ended' }), notification.get('created_at'))}>\n          <div className='notification__message'>\n            <div className='notification__favourite-icon-wrapper'>\n              <Icon id='tasks' fixedWidth />\n            </div>\n\n            <span title={notification.get('created_at')}>\n              <FormattedMessage id='notification.poll' defaultMessage='A poll you have voted in has ended' />\n            </span>\n          </div>\n\n          <StatusContainer\n            id={notification.get('status')}\n            account={notification.get('account')}\n            muted\n            withDismiss\n            hidden={this.props.hidden}\n            getScrollPosition={this.props.getScrollPosition}\n            updateScrollBottom={this.props.updateScrollBottom}\n            cachedMediaWidth={this.props.cachedMediaWidth}\n            cacheMediaWidth={this.props.cacheMediaWidth}\n          />\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    case 'poll':\n      return this.renderPoll(notification);\n    }\n\n    return null;\n  }\n\n}\n","import { connect } from 'react-redux';\nimport { makeGetNotification, makeGetStatus } from '../../../selectors';\nimport Notification from '../components/notification';\nimport { openModal } from '../../../actions/modal';\nimport { mentionCompose } from '../../../actions/compose';\nimport {\n  reblog,\n  favourite,\n  unreblog,\n  unfavourite,\n} from '../../../actions/interactions';\nimport {\n  hideStatus,\n  revealStatus,\n} from '../../../actions/statuses';\nimport { boostModal } from '../../../initial_state';\n\nconst makeMapStateToProps = () => {\n  const getNotification = makeGetNotification();\n  const getStatus = makeGetStatus();\n\n  const mapStateToProps = (state, props) => {\n    const notification = getNotification(state, props.notification, props.accountId);\n    return {\n      notification: notification,\n      status: notification.get('status') ? getStatus(state, { id: notification.get('status') }) : null,\n    };\n  };\n\n  return mapStateToProps;\n};\n\nconst mapDispatchToProps = dispatch => ({\n  onMention: (account, router) => {\n    dispatch(mentionCompose(account, router));\n  },\n\n  onModalReblog (status) {\n    dispatch(reblog(status));\n  },\n\n  onReblog (status, e) {\n    if (status.get('reblogged')) {\n      dispatch(unreblog(status));\n    } else {\n      if (e.shiftKey || !boostModal) {\n        this.onModalReblog(status);\n      } else {\n        dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));\n      }\n    }\n  },\n\n  onFavourite (status) {\n    if (status.get('favourited')) {\n      dispatch(unfavourite(status));\n    } else {\n      dispatch(favourite(status));\n    }\n  },\n\n  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\nexport default connect(makeMapStateToProps, mapDispatchToProps)(Notification);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport Icon from 'mastodon/components/icon';\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}><Icon id='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 filterShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show' defaultMessage='Show' />;\n    const filterAdvancedStr = <FormattedMessage id='notifications.column_settings.filter_bar.advanced' defaultMessage='Display all categories' />;\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\n    return (\n      <div>\n        <div className='column-settings__row'>\n          <ClearColumnButton onClick={onClear} />\n        </div>\n\n        <div role='group' aria-labelledby='notifications-filter-bar'>\n          <span id='notifications-filter-bar' className='column-settings__section'>\n            <FormattedMessage id='notifications.column_settings.filter_bar.category' defaultMessage='Quick filter bar' />\n          </span>\n          <div className='column-settings__row'>\n            <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'show']} onChange={onChange} label={filterShowStr} />\n            <SettingToggle id='show-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'advanced']} onChange={onChange} label={filterAdvancedStr} />\n          </div>\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']} 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']} 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']} 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']} 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\n        <div role='group' aria-labelledby='notifications-poll'>\n          <span id='notifications-poll' className='column-settings__section'><FormattedMessage id='notifications.column_settings.poll' defaultMessage='Poll results:' /></span>\n\n          <div className='column-settings__row'>\n            <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'poll']} onChange={onChange} label={alertStr} />\n            {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'poll']} onChange={this.onPushChange} label={pushStr} />}\n            <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'poll']} onChange={onChange} label={showStr} />\n            <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'poll']} 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 { setFilter } from '../../../actions/notifications';\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 if (path[0] === 'quickFilter') {\n      dispatch(changeSetting(['notifications', ...path], checked));\n      dispatch(setFilter('all'));\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 PropTypes from 'prop-types';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Icon from 'mastodon/components/icon';\n\nconst tooltips = defineMessages({\n  mentions: { id: 'notifications.filter.mentions', defaultMessage: 'Mentions' },\n  favourites: { id: 'notifications.filter.favourites', defaultMessage: 'Favourites' },\n  boosts: { id: 'notifications.filter.boosts', defaultMessage: 'Boosts' },\n  polls: { id: 'notifications.filter.polls', defaultMessage: 'Poll results' },\n  follows: { id: 'notifications.filter.follows', defaultMessage: 'Follows' },\n});\n\nexport default @injectIntl\nclass FilterBar extends React.PureComponent {\n\n  static propTypes = {\n    selectFilter: PropTypes.func.isRequired,\n    selectedFilter: PropTypes.string.isRequired,\n    advancedMode: PropTypes.bool.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  onClick (notificationType) {\n    return () => this.props.selectFilter(notificationType);\n  }\n\n  render () {\n    const { selectedFilter, advancedMode, intl } = this.props;\n    const renderedElement = !advancedMode ? (\n      <div className='notification__filter-bar'>\n        <button\n          className={selectedFilter === 'all' ? 'active' : ''}\n          onClick={this.onClick('all')}\n        >\n          <FormattedMessage\n            id='notifications.filter.all'\n            defaultMessage='All'\n          />\n        </button>\n        <button\n          className={selectedFilter === 'mention' ? 'active' : ''}\n          onClick={this.onClick('mention')}\n        >\n          <FormattedMessage\n            id='notifications.filter.mentions'\n            defaultMessage='Mentions'\n          />\n        </button>\n      </div>\n    ) : (\n      <div className='notification__filter-bar'>\n        <button\n          className={selectedFilter === 'all' ? 'active' : ''}\n          onClick={this.onClick('all')}\n        >\n          <FormattedMessage\n            id='notifications.filter.all'\n            defaultMessage='All'\n          />\n        </button>\n        <button\n          className={selectedFilter === 'mention' ? 'active' : ''}\n          onClick={this.onClick('mention')}\n          title={intl.formatMessage(tooltips.mentions)}\n        >\n          <Icon id='reply-all' fixedWidth />\n        </button>\n        <button\n          className={selectedFilter === 'favourite' ? 'active' : ''}\n          onClick={this.onClick('favourite')}\n          title={intl.formatMessage(tooltips.favourites)}\n        >\n          <Icon id='star' fixedWidth />\n        </button>\n        <button\n          className={selectedFilter === 'reblog' ? 'active' : ''}\n          onClick={this.onClick('reblog')}\n          title={intl.formatMessage(tooltips.boosts)}\n        >\n          <Icon id='retweet' fixedWidth />\n        </button>\n        <button\n          className={selectedFilter === 'poll' ? 'active' : ''}\n          onClick={this.onClick('poll')}\n          title={intl.formatMessage(tooltips.polls)}\n        >\n          <Icon id='tasks' fixedWidth />\n        </button>\n        <button\n          className={selectedFilter === 'follow' ? 'active' : ''}\n          onClick={this.onClick('follow')}\n          title={intl.formatMessage(tooltips.follows)}\n        >\n          <Icon id='user-plus' fixedWidth />\n        </button>\n      </div>\n    );\n    return renderedElement;\n  }\n\n}\n","import { connect } from 'react-redux';\nimport FilterBar from '../components/filter_bar';\nimport { setFilter } from '../../../actions/notifications';\n\nconst makeMapStateToProps = state => ({\n  selectedFilter: state.getIn(['settings', 'notifications', 'quickFilter', 'active']),\n  advancedMode: state.getIn(['settings', 'notifications', 'quickFilter', 'advanced']),\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n  selectFilter (newActiveFilter) {\n    dispatch(setFilter(newActiveFilter));\n  },\n});\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(FilterBar);\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, loadPending, mountNotifications, unmountNotifications } 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 FilterBarContainer from './containers/filter_bar_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 => state.getIn(['settings', 'notifications', 'quickFilter', 'show']),\n  state => state.getIn(['settings', 'notifications', 'quickFilter', 'active']),\n  state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()),\n  state => state.getIn(['notifications', 'items']),\n], (showFilterBar, allowedType, excludedTypes, notifications) => {\n  if (!showFilterBar || allowedType === 'all') {\n    // used if user changed the notification settings after loading the notifications from the server\n    // otherwise a list of notifications will come pre-filtered from the backend\n    // we need to turn it off for FilterBar in order not to block ourselves from seeing a specific category\n    return notifications.filterNot(item => item !== null && excludedTypes.includes(item.get('type')));\n  }\n  return notifications.filter(item => item !== null && allowedType === item.get('type'));\n});\n\nconst mapStateToProps = state => ({\n  showFilterBar: state.getIn(['settings', 'notifications', 'quickFilter', 'show']),\n  notifications: getNotifications(state),\n  isLoading: state.getIn(['notifications', 'isLoading'], true),\n  isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0,\n  hasMore: state.getIn(['notifications', 'hasMore']),\n  numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size,\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Notifications extends React.PureComponent {\n\n  static propTypes = {\n    columnId: PropTypes.string,\n    notifications: ImmutablePropTypes.list.isRequired,\n    showFilterBar: PropTypes.bool.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    numPending: PropTypes.number,\n  };\n\n  static defaultProps = {\n    trackScroll: true,\n  };\n\n  componentWillMount() {\n    this.props.dispatch(mountNotifications());\n  }\n\n  componentWillUnmount () {\n    this.handleLoadOlder.cancel();\n    this.handleScrollToTop.cancel();\n    this.handleScroll.cancel();\n    this.props.dispatch(scrollTopNotifications(false));\n    this.props.dispatch(unmountNotifications());\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  handleLoadPending = () => {\n    this.props.dispatch(loadPending());\n  };\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, true);\n  }\n\n  handleMoveDown = id => {\n    const elementIndex = this.props.notifications.findIndex(item => item !== null && item.get('id') === id) + 1;\n    this._selectChild(elementIndex, false);\n  }\n\n  _selectChild (index, align_top) {\n    const container = this.column.node;\n    const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`);\n\n    if (element) {\n      if (align_top && container.scrollTop > element.offsetTop) {\n        element.scrollIntoView(true);\n      } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n        element.scrollIntoView(false);\n      }\n      element.focus();\n    }\n  }\n\n  render () {\n    const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar } = 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    const filterBarContainer = showFilterBar\n      ? (<FilterBarContainer />)\n      : 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        showLoading={isLoading && notifications.size === 0}\n        hasMore={hasMore}\n        numPending={numPending}\n        emptyMessage={emptyMessage}\n        onLoadMore={this.handleLoadOlder}\n        onLoadPending={this.handleLoadPending}\n        onScrollToTop={this.handleScrollToTop}\n        onScroll={this.handleScroll}\n        shouldUpdateScroll={shouldUpdateScroll}\n        bindToDocument={!multiColumn}\n      >\n        {scrollableContent}\n      </ScrollableList>\n    );\n\n    return (\n      <Column bindToDocument={!multiColumn} 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        {filterBarContainer}\n        {scrollContainer}\n      </Column>\n    );\n  }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file