about summary refs log tree commit diff
path: root/app/javascript
diff options
context:
space:
mode:
authorThibaut Girka <thib@sitedethib.com>2018-09-06 20:55:11 +0200
committerThibG <thib@sitedethib.com>2018-09-07 20:37:17 +0200
commit324ce93368bbac88a5b53083c8932ec175450f55 (patch)
tree019a413b5d4b20bad7114081e1df5afe4f01fe53 /app/javascript
parentba4521b175a2d0906e2a62e93e39cb80fa9286c9 (diff)
Add preferences for notification badges
Diffstat (limited to 'app/javascript')
-rw-r--r--app/javascript/flavours/glitch/features/drawer/header/index.js4
-rw-r--r--app/javascript/flavours/glitch/features/drawer/index.js4
-rw-r--r--app/javascript/flavours/glitch/features/local_settings/page/index.js20
-rw-r--r--app/javascript/flavours/glitch/features/ui/components/tabs_bar.js6
-rw-r--r--app/javascript/flavours/glitch/features/ui/index.js7
-rw-r--r--app/javascript/flavours/glitch/reducers/local_settings.js4
6 files changed, 39 insertions, 6 deletions
diff --git a/app/javascript/flavours/glitch/features/drawer/header/index.js b/app/javascript/flavours/glitch/features/drawer/header/index.js
index 435538de4..7fefd32c9 100644
--- a/app/javascript/flavours/glitch/features/drawer/header/index.js
+++ b/app/javascript/flavours/glitch/features/drawer/header/index.js
@@ -47,6 +47,7 @@ const messages = defineMessages({
 export default function DrawerHeader ({
   columns,
   unreadNotifications,
+  showNotificationsBadge,
   intl,
   onSettingsClick,
 }) {
@@ -81,7 +82,7 @@ export default function DrawerHeader ({
         >
           <span className='icon-badge-wrapper'>
             <Icon icon='bell' />
-            { unreadNotifications > 0 && <div className='icon-badge' />}
+            { showNotificationsBadge && unreadNotifications > 0 && <div className='icon-badge' />}
           </span>
         </Link>
       ))}
@@ -119,6 +120,7 @@ export default function DrawerHeader ({
 DrawerHeader.propTypes = {
   columns: ImmutablePropTypes.list,
   unreadNotifications: PropTypes.number,
+  showNotificationsBadge: PropTypes.bool,
   intl: PropTypes.object,
   onSettingsClick: PropTypes.func,
 };
diff --git a/app/javascript/flavours/glitch/features/drawer/index.js b/app/javascript/flavours/glitch/features/drawer/index.js
index e8d9c86cb..72b36fcae 100644
--- a/app/javascript/flavours/glitch/features/drawer/index.js
+++ b/app/javascript/flavours/glitch/features/drawer/index.js
@@ -35,6 +35,7 @@ const mapStateToProps = state => ({
   searchValue: state.getIn(['search', 'value']),
   submitted: state.getIn(['search', 'submitted']),
   unreadNotifications: state.getIn(['notifications', 'unread']),
+  showNotificationsBadge: state.getIn(['local_settings', 'notifications', 'tab_badge']),
 });
 
 //  Dispatch mapping.
@@ -89,6 +90,7 @@ class Drawer extends React.Component {
       submitted,
       isSearchPage,
       unreadNotifications,
+      showNotificationsBadge,
     } = this.props;
     const computedClass = classNames('drawer', `mbstobon-${elefriend}`);
 
@@ -99,6 +101,7 @@ class Drawer extends React.Component {
           <DrawerHeader
             columns={columns}
             unreadNotifications={unreadNotifications}
+            showNotificationsBadge={showNotificationsBadge}
             intl={intl}
             onSettingsClick={onOpenSettings}
           />
@@ -143,6 +146,7 @@ Drawer.propTypes = {
   searchValue: PropTypes.string,
   submitted: PropTypes.bool,
   unreadNotifications: PropTypes.number,
+  showNotificationsBadge: PropTypes.bool,
 
   //  Dispatch props.
   onChange: PropTypes.func,
diff --git a/app/javascript/flavours/glitch/features/local_settings/page/index.js b/app/javascript/flavours/glitch/features/local_settings/page/index.js
index 9f300e7e9..2e14c9dd5 100644
--- a/app/javascript/flavours/glitch/features/local_settings/page/index.js
+++ b/app/javascript/flavours/glitch/features/local_settings/page/index.js
@@ -43,6 +43,25 @@ export default class LocalSettingsPage extends React.PureComponent {
           <FormattedMessage id='settings.show_reply_counter' defaultMessage='Display an estimate of the reply count' />
         </LocalSettingsPageItem>
         <section>
+          <h2><FormattedMessage id='settings.notifications_opts' defaultMessage='Notifications options' /></h2>
+          <LocalSettingsPageItem
+            settings={settings}
+            item={['notifications', 'tab_badge']}
+            id='mastodon-settings--notifications-tab_badge'
+            onChange={onChange}
+          >
+            <FormattedMessage id='settings.notifications.tab_badge' defaultMessage="Display a badge for unread notifications if the notifications column isn't open" />
+          </LocalSettingsPageItem>
+          <LocalSettingsPageItem
+            settings={settings}
+            item={['notifications', 'favicon_badge']}
+            id='mastodon-settings--notifications-favicon_badge'
+            onChange={onChange}
+          >
+            <FormattedMessage id='settings.notifications.favicon_badge' defaultMessage='Display unread notifications count in the favicon' />
+          </LocalSettingsPageItem>
+        </section>
+        <section>
           <h2><FormattedMessage id='settings.layout_opts' defaultMessage='Layout options' /></h2>
           <LocalSettingsPageItem
             settings={settings}
@@ -78,7 +97,6 @@ export default class LocalSettingsPage extends React.PureComponent {
     ),
     ({ intl, onChange, settings }) => (
       <div className='glitch local-settings_page compose_box_opts'>
-<section>
         <h1><FormattedMessage id='settings.compose_box_opts' defaultMessage='Compose box options' /></h1>
         <LocalSettingsPageItem
           settings={settings}
diff --git a/app/javascript/flavours/glitch/features/ui/components/tabs_bar.js b/app/javascript/flavours/glitch/features/ui/components/tabs_bar.js
index 6b9cf27e1..b44a21a42 100644
--- a/app/javascript/flavours/glitch/features/ui/components/tabs_bar.js
+++ b/app/javascript/flavours/glitch/features/ui/components/tabs_bar.js
@@ -8,20 +8,22 @@ import { connect } from 'react-redux';
 
 const mapStateToProps = state => ({
   unreadNotifications: state.getIn(['notifications', 'unread']),
+  showBadge: state.getIn(['local_settings', 'notifications', 'tab_badge']),
 });
 
 @connect(mapStateToProps)
 class NotificationsIcon extends React.PureComponent {
   static propTypes = {
     unreadNotifications: PropTypes.number,
+    showBadge: PropTypes.bool,
   };
 
   render() {
-    const { unreadNotifications } = this.props;
+    const { unreadNotifications, showBadge } = this.props;
     return (
       <span className='icon-badge-wrapper'>
         <i className='fa fa-fw fa-bell' />
-        { unreadNotifications > 0 && <div className='icon-badge' />}
+        { showBadge && unreadNotifications > 0 && <div className='icon-badge' />}
       </span>
     );
   }
diff --git a/app/javascript/flavours/glitch/features/ui/index.js b/app/javascript/flavours/glitch/features/ui/index.js
index 3dd894383..064804b79 100644
--- a/app/javascript/flavours/glitch/features/ui/index.js
+++ b/app/javascript/flavours/glitch/features/ui/index.js
@@ -66,6 +66,7 @@ const mapStateToProps = state => ({
   navbarUnder: state.getIn(['local_settings', 'navbar_under']),
   dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,
   unreadNotifications: state.getIn(['notifications', 'unread']),
+  showFaviconBadge: state.getIn(['local_settings', 'notifications', 'favicon_badge']),
 });
 
 const keyMap = {
@@ -118,6 +119,7 @@ export default class UI extends React.Component {
     intl: PropTypes.object.isRequired,
     dropdownMenuIsOpen: PropTypes.bool,
     unreadNotifications: PropTypes.number,
+    showFaviconBadge: PropTypes.bool,
   };
 
   state = {
@@ -272,9 +274,10 @@ export default class UI extends React.Component {
     if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) {
       this.columnsAreaNode.handleChildrenContentChange();
     }
-    if (this.props.unreadNotifications != prevProps.unreadNotifications) {
+    if (this.props.unreadNotifications != prevProps.unreadNotifications ||
+        this.props.showFaviconBadge != prevProps.showFaviconBadge) {
       if (this.favicon) {
-        this.favicon.badge(this.props.unreadNotifications);
+        this.favicon.badge(this.props.showFaviconBadge ? this.props.unreadNotifications : 0);
       }
     }
   }
diff --git a/app/javascript/flavours/glitch/reducers/local_settings.js b/app/javascript/flavours/glitch/reducers/local_settings.js
index 063ae3943..f5f7220b9 100644
--- a/app/javascript/flavours/glitch/reducers/local_settings.js
+++ b/app/javascript/flavours/glitch/reducers/local_settings.js
@@ -37,6 +37,10 @@ const initialState = ImmutableMap({
     letterbox   : true,
     fullwidth   : true,
   }),
+  notifications : ImmutableMap({
+    favicon_badge : false,
+    tab_badge     : true,
+  }),
 });
 
 const hydrate = (state, localSettings) => state.mergeDeep(localSettings);