From 78be17ec6d5ac51106608c6c41d021cc7ce57861 Mon Sep 17 00:00:00 2001 From: David Jay Date: Thu, 2 Mar 2017 15:19:33 -0500 Subject: [PATCH] Adding keyboard selection of comments. --- client/coral-admin/src/components/Comment.js | 71 ------------------- .../src/components/ModerationList.css | 4 ++ .../ModerationQueue/ModerationContainer.js | 8 +++ .../ModerationQueue/ModerationQueue.js | 3 +- .../ModerationQueue/components/Comment.js | 2 +- .../ModerationQueue/components/styles.css | 4 ++ 6 files changed, 19 insertions(+), 73 deletions(-) delete mode 100644 client/coral-admin/src/components/Comment.js diff --git a/client/coral-admin/src/components/Comment.js b/client/coral-admin/src/components/Comment.js deleted file mode 100644 index db5cfe5bf..000000000 --- a/client/coral-admin/src/components/Comment.js +++ /dev/null @@ -1,71 +0,0 @@ -import React from 'react'; -import timeago from 'timeago.js'; -import Linkify from 'react-linkify'; - -import styles from './ModerationList.css'; - -import I18n from 'coral-framework/modules/i18n/i18n'; -import translations from '../translations.json'; - -import Highlighter from 'react-highlight-words'; -import {Icon} from 'coral-ui'; -import ActionButton from './ActionButton'; - -const linkify = new Linkify(); - -// Render a single comment for the list -const Comment = props => { - const {comment, author} = props; - let authorStatus = author.status; - const links = linkify.getMatches(comment.body); - - return ( -
  • -
    -
    - {author.username || lang.t('comment.anon')} - {timeago().format(comment.createdAt || (Date.now() - props.index * 60 * 1000), lang.getLocale().replace('-', '_'))} - {comment.flagged ?

    {lang.t('comment.flagged')}

    : null} -
    -
    - {links ? - Contains Link : null} -
    - {props.modActions.map( - (action, i) => - - )} -
    - {authorStatus === 'banned' ? - {lang.t('comment.banned_user')} : null} -
    -
    -
    - - - - - -
    -
  • - ); -}; - -export default Comment; - -const linkStyles = { - backgroundColor: 'rgb(255, 219, 135)', - padding: '1px 2px' -}; - -const lang = new I18n(translations); diff --git a/client/coral-admin/src/components/ModerationList.css b/client/coral-admin/src/components/ModerationList.css index 140f4bc8f..7036998d1 100644 --- a/client/coral-admin/src/components/ModerationList.css +++ b/client/coral-admin/src/components/ModerationList.css @@ -178,6 +178,10 @@ } } +.selected { + border-radius: 10px; +} + .actionButton { transform: scale(.8); diff --git a/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js b/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js index 48741c2ad..1505316cd 100644 --- a/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js +++ b/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js @@ -20,13 +20,20 @@ import NotFoundAsset from './components/NotFoundAsset'; import ModerationKeysModal from '../../components/ModerationKeysModal'; class ModerationContainer extends Component { + state = { + selectedIndex: 0 + } + componentWillMount() { const {toggleModal, singleView} = this.props; + const {selectedIndex} = this.state; this.props.fetchSettings(); key('s', () => singleView()); key('shift+/', () => toggleModal(true)); key('esc', () => toggleModal(false)); + key('j', () => this.setState({selectedIndex: selectedIndex + 1})); + key('k', () => this.setState({selectedIndex: selectedIndex > 0 ? selectedIndex + 1 : selectedIndex})); } componentWillUnmount() { @@ -81,6 +88,7 @@ class ModerationContainer extends Component { currentAsset={asset} comments={comments} activeTab={activeTab} + selectedIndex={this.state.selectedIndex} suspectWords={settings.wordlist.suspect} showBanUserDialog={props.showBanUserDialog} acceptComment={props.acceptComment} diff --git a/client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js b/client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js index cdbc7f28c..e3ba12b09 100644 --- a/client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js +++ b/client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js @@ -7,7 +7,7 @@ import I18n from 'coral-framework/modules/i18n/i18n'; import translations from 'coral-admin/src/translations'; const lang = new I18n(translations); -const ModerationQueue = ({comments, ...props}) => { +const ModerationQueue = ({comments, selectedIndex, ...props}) => { return (