From 497225139dd1a7bf09d4d82f6fe3120dca7a5b55 Mon Sep 17 00:00:00 2001 From: Kim Gardner Date: Tue, 20 Mar 2018 10:14:41 -0400 Subject: [PATCH] Adding upvote and downvote plugins and sorting plugins for each --- .gitignore | 5 +- .../client/.eslintrc.json | 23 ++++++++ .../client/components/DownvoteButton.css | 39 +++++++++++++ .../client/components/DownvoteButton.js | 56 +++++++++++++++++++ .../client/components/Icon.js | 9 +++ plugins/talk-plugin-downvote/client/index.js | 25 +++++++++ plugins/talk-plugin-downvote/index.js | 2 + .../client/.eslintrc.json | 3 + .../client/index.js | 19 +++++++ .../client/translations.yml | 3 + .../talk-plugin-sort-most-downvoted/index.js | 1 + .../client/.eslintrc.json | 3 + .../client/index.js | 19 +++++++ .../client/translations.yml | 3 + .../talk-plugin-sort-most-upvoted/index.js | 1 + .../talk-plugin-upvote/client/.eslintrc.json | 23 ++++++++ .../client/components/Icon.js | 6 ++ .../client/components/UpvoteButton.css | 39 +++++++++++++ .../client/components/UpvoteButton.js | 54 ++++++++++++++++++ plugins/talk-plugin-upvote/client/index.js | 25 +++++++++ plugins/talk-plugin-upvote/index.js | 2 + 21 files changed, 359 insertions(+), 1 deletion(-) create mode 100644 plugins/talk-plugin-downvote/client/.eslintrc.json create mode 100644 plugins/talk-plugin-downvote/client/components/DownvoteButton.css create mode 100644 plugins/talk-plugin-downvote/client/components/DownvoteButton.js create mode 100644 plugins/talk-plugin-downvote/client/components/Icon.js create mode 100644 plugins/talk-plugin-downvote/client/index.js create mode 100644 plugins/talk-plugin-downvote/index.js create mode 100644 plugins/talk-plugin-sort-most-downvoted/client/.eslintrc.json create mode 100644 plugins/talk-plugin-sort-most-downvoted/client/index.js create mode 100644 plugins/talk-plugin-sort-most-downvoted/client/translations.yml create mode 100644 plugins/talk-plugin-sort-most-downvoted/index.js create mode 100644 plugins/talk-plugin-sort-most-upvoted/client/.eslintrc.json create mode 100644 plugins/talk-plugin-sort-most-upvoted/client/index.js create mode 100644 plugins/talk-plugin-sort-most-upvoted/client/translations.yml create mode 100644 plugins/talk-plugin-sort-most-upvoted/index.js create mode 100644 plugins/talk-plugin-upvote/client/.eslintrc.json create mode 100644 plugins/talk-plugin-upvote/client/components/Icon.js create mode 100644 plugins/talk-plugin-upvote/client/components/UpvoteButton.css create mode 100644 plugins/talk-plugin-upvote/client/components/UpvoteButton.js create mode 100644 plugins/talk-plugin-upvote/client/index.js create mode 100644 plugins/talk-plugin-upvote/index.js diff --git a/.gitignore b/.gitignore index 7c0007dc9..50e490095 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ plugins/* !plugins/talk-plugin-author-menu !plugins/talk-plugin-comment-content !plugins/talk-plugin-deep-reply-count +!plugins/talk-plugin-downvote !plugins/talk-plugin-facebook-auth !plugins/talk-plugin-featured-comments !plugins/talk-plugin-flag-details @@ -52,14 +53,16 @@ plugins/* !plugins/talk-plugin-remember-sort !plugins/talk-plugin-respect !plugins/talk-plugin-slack-notifications -!plugins/talk-plugin-sort-most-liked +!plugins/talk-plugin-sort-most-downvoted !plugins/talk-plugin-sort-most-loved !plugins/talk-plugin-sort-most-replied !plugins/talk-plugin-sort-most-respected +!plugins/talk-plugin-sort-most-upvoted !plugins/talk-plugin-sort-newest !plugins/talk-plugin-sort-oldest !plugins/talk-plugin-subscriber !plugins/talk-plugin-toxic-comments +!plugins/talk-plugin-upvote !plugins/talk-plugin-viewing-options !plugins/talk-plugin-rich-text !plugins/talk-plugin-rich-text-pell diff --git a/plugins/talk-plugin-downvote/client/.eslintrc.json b/plugins/talk-plugin-downvote/client/.eslintrc.json new file mode 100644 index 000000000..9fe56bd14 --- /dev/null +++ b/plugins/talk-plugin-downvote/client/.eslintrc.json @@ -0,0 +1,23 @@ +{ + "env": { + "browser": true, + "es6": true, + "mocha": true + }, + "parserOptions": { + "sourceType": "module", + "ecmaFeatures": { + "experimentalObjectRestSpread": true, + "jsx": true + } + }, + "parser": "babel-eslint", + "plugins": [ + "react" + ], + "rules": { + "react/jsx-uses-react": "error", + "react/jsx-uses-vars": "error", + "no-console": ["warn", { "allow": ["warn", "error"] }] + } +} diff --git a/plugins/talk-plugin-downvote/client/components/DownvoteButton.css b/plugins/talk-plugin-downvote/client/components/DownvoteButton.css new file mode 100644 index 000000000..71090306b --- /dev/null +++ b/plugins/talk-plugin-downvote/client/components/DownvoteButton.css @@ -0,0 +1,39 @@ +.container { + display: inline-block; +} + +.button { + color: #2a2a2a; + margin: 5px 10px 5px 0px; + background: none; + padding: 0px; + border: none; + font-size: inherit; + vertical-align: middle; + + &:hover { + color: #767676; + cursor: pointer; + } + + &.downvoted { + color: #cc0000; + + &:hover { + color: #ff3232; + cursor: pointer; + } + } +} + +.icon { + font-size: 12px; + padding: 0 3px; +} + +@media (max-width: 425px) { + .label { + display: none; + } +} + diff --git a/plugins/talk-plugin-downvote/client/components/DownvoteButton.js b/plugins/talk-plugin-downvote/client/components/DownvoteButton.js new file mode 100644 index 000000000..2bf34260b --- /dev/null +++ b/plugins/talk-plugin-downvote/client/components/DownvoteButton.js @@ -0,0 +1,56 @@ +import React from 'react'; +import Icon from './Icon'; +import styles from './DownvoteButton.css'; +import { withReaction } from 'plugin-api/beta/client/hocs'; +import cn from 'classnames'; + +const plugin = 'talk-plugin-downvote'; + +class DownvoteButton extends React.Component { + handleClick = () => { + const { + postReaction, + deleteReaction, + showSignInDialog, + alreadyReacted, + user, + } = this.props; + + // If the current user does not exist, trigger sign in dialog. + if (!user) { + showSignInDialog(); + return; + } + + if (alreadyReacted) { + deleteReaction(); + } else { + postReaction(); + } + }; + + render() { + const { count, alreadyReacted } = this.props; + return ( +
+ +
+ ); + } +} + +export default withReaction('downvote')(DownvoteButton); diff --git a/plugins/talk-plugin-downvote/client/components/Icon.js b/plugins/talk-plugin-downvote/client/components/Icon.js new file mode 100644 index 000000000..13d91fa9c --- /dev/null +++ b/plugins/talk-plugin-downvote/client/components/Icon.js @@ -0,0 +1,9 @@ +import React from 'react'; +import cn from 'classnames'; + +export default ({ className }) => ( +