about summary refs log tree commit diff
path: root/app/javascript/glitch/components
diff options
context:
space:
mode:
authorOndřej Hruška <ondra@ondrovo.com>2017-07-27 00:41:28 +0200
committerOndřej Hruška <ondra@ondrovo.com>2017-07-27 00:41:28 +0200
commitcb69e35b3b13a67df5216b2c5fd657a62b3bda7a (patch)
treeee076b48136dfbccfd9b9009eb05551f9d9baa31 /app/javascript/glitch/components
parente82021e0e634c4cf4ba1880c6c47fac16c839d2e (diff)
Add visibility icon to Detailed status
Diffstat (limited to 'app/javascript/glitch/components')
-rw-r--r--app/javascript/glitch/components/status/header.js24
-rw-r--r--app/javascript/glitch/components/status/index.js3
-rw-r--r--app/javascript/glitch/components/status/visibility_icon.js48
3 files changed, 56 insertions, 19 deletions
diff --git a/app/javascript/glitch/components/status/header.js b/app/javascript/glitch/components/status/header.js
index 3187fa7fb..5ce59fba4 100644
--- a/app/javascript/glitch/components/status/header.js
+++ b/app/javascript/glitch/components/status/header.js
@@ -29,6 +29,7 @@ import Avatar from '../../../mastodon/components/avatar';
 import AvatarOverlay from '../../../mastodon/components/avatar_overlay';
 import DisplayName from '../../../mastodon/components/display_name';
 import IconButton from '../../../mastodon/components/icon_button';
+import VisibilityIcon from './visibility_icon';
 
                             /* * * * */
 
@@ -94,7 +95,7 @@ icons) into a single `<header>` element.
 export default class StatusHeader extends React.PureComponent {
 
   static propTypes = {
-    account: ImmutablePropTypes.map.isRequired,
+    status: ImmutablePropTypes.map.isRequired,
     friend: ImmutablePropTypes.map,
     mediaIcon: PropTypes.string,
     collapsible: PropTypes.bool,
@@ -102,7 +103,6 @@ export default class StatusHeader extends React.PureComponent {
     parseClick: PropTypes.func.isRequired,
     setExpansion: PropTypes.func.isRequired,
     intl: PropTypes.object.isRequired,
-    visibility: PropTypes.string,
   };
 
 /*
@@ -135,8 +135,8 @@ status.
 */
 
   handleAccountClick = (e) => {
-    const { account, parseClick } = this.props;
-    parseClick(e, `/accounts/${+account.get('id')}`);
+    const { status, parseClick } = this.props;
+    parseClick(e, `/accounts/${+status.getIn(['account', 'id'])}`);
   }
 
 /*
@@ -150,21 +150,15 @@ has a very straightforward rendering process.
 
   render () {
     const {
-      account,
+      status,
       friend,
       mediaIcon,
       collapsible,
       collapsed,
       intl,
-      visibility,
     } = this.props;
 
-    const visibilityClass = {
-      public: 'globe',
-      unlisted: 'unlock-alt',
-      private: 'lock',
-      direct: 'envelope',
-    }[visibility];
+    const account = status.get('account');
 
     return (
       <header className='status__info'>
@@ -186,11 +180,7 @@ it is rendered as a float.
             />
           ) : null}
           {(
-            <i
-              className={`status__visibility-icon fa fa-fw fa-${visibilityClass}`}
-              title={intl.formatMessage(messages[visibility])}
-              aria-hidden='true'
-            />
+            <VisibilityIcon visibility={status.get('visibility')} />
           )}
           {collapsible ? (
             <IconButton
diff --git a/app/javascript/glitch/components/status/index.js b/app/javascript/glitch/components/status/index.js
index b7ec8b4ca..5571b3c85 100644
--- a/app/javascript/glitch/components/status/index.js
+++ b/app/javascript/glitch/components/status/index.js
@@ -704,10 +704,9 @@ collapsed.
           />
         ) : null}
         <StatusHeader
-          account={status.get('account')}
+          status={status}
           friend={account}
           mediaIcon={mediaIcon}
-          visibility={status.get('visibility')}
           collapsible={settings.getIn(['collapsed', 'enabled'])}
           collapsed={isExpanded === false}
           parseClick={parseClick}
diff --git a/app/javascript/glitch/components/status/visibility_icon.js b/app/javascript/glitch/components/status/visibility_icon.js
new file mode 100644
index 000000000..017b69cbb
--- /dev/null
+++ b/app/javascript/glitch/components/status/visibility_icon.js
@@ -0,0 +1,48 @@
+//  Package imports  //
+import React from 'react';
+import PropTypes from 'prop-types';
+import { defineMessages, injectIntl } from 'react-intl';
+import ImmutablePureComponent from 'react-immutable-pure-component';
+
+const messages = defineMessages({
+  public: { id: 'privacy.public.short', defaultMessage: 'Public' },
+  unlisted: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
+  private: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },
+  direct: { id: 'privacy.direct.short', defaultMessage: 'Direct' },
+});
+
+@injectIntl
+export default class VisibilityIcon extends ImmutablePureComponent {
+
+  static propTypes = {
+    visibility: PropTypes.string,
+    intl: PropTypes.object.isRequired,
+    withLabel: PropTypes.bool,
+  };
+
+  render() {
+    const { withLabel, visibility, intl } = this.props;
+
+    const visibilityClass = {
+      public: 'globe',
+      unlisted: 'unlock-alt',
+      private: 'lock',
+      direct: 'envelope',
+    }[visibility];
+
+    const label = intl.formatMessage(messages[visibility]);
+
+    const icon = (<i
+      className={`status__visibility-icon fa fa-fw fa-${visibilityClass}`}
+      title={label}
+      aria-hidden='true'
+    />);
+
+    if (withLabel) {
+      return (<span style={{ whiteSpace: 'nowrap' }}>{icon} {label}</span>);
+    } else {
+      return icon;
+    }
+  }
+
+}