diff --git a/.babelrc b/.babelrc
index 92a64c2a4..ed21974ac 100644
--- a/.babelrc
+++ b/.babelrc
@@ -1,6 +1,6 @@
{
"presets": [
- ["es2015", {modules: false}]
+ ["es2015", {"modules": false}]
],
"plugins": [
"transform-class-properties",
diff --git a/.gitignore b/.gitignore
index 5bf0d6527..a660453ea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@ npm-debug.log*
dump.rdb
client/coral-framework/graphql/introspection.json
+docs/source/_data/introspection.json
.env
*.cfg
@@ -30,6 +31,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,17 +54,19 @@ plugins/*
!plugins/talk-plugin-remember-sort
!plugins/talk-plugin-respect
!plugins/talk-plugin-slack-notifications
+!plugins/talk-plugin-sort-most-downvoted
!plugins/talk-plugin-sort-most-liked
!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
!plugins/talk-plugin-auth-checkbox
**/node_modules/*
diff --git a/.nodemon.json b/.nodemon.json
index 101104f4a..5e192d80c 100644
--- a/.nodemon.json
+++ b/.nodemon.json
@@ -1,6 +1,6 @@
{
"exec": "npm-run-all --parallel generate-introspection start:development",
- "ignore": ["test/*", "client/*", "dist/*", "plugins/*/client"],
+ "ignore": ["test/*", "client/*", "dist/*", "plugins/*/client", "docs/*"],
"ext": "js,json,graphql,yml",
"watch": [
".",
diff --git a/README.md b/README.md
index 31e285607..6bdb7fda0 100644
--- a/README.md
+++ b/README.md
@@ -16,15 +16,19 @@ From getting up and running, to advanced configuration, to how to scale Talk, ou
## Product Guide
-Learn more about Talk, including a deep dive into features for commenters and moderators, and FAQs in our [Talk Product Guide](https:/docs.coralproject.net/talk/how-talk-works).
+Learn more about Talk, including a deep dive into features for commenters and moderators, and FAQs in our [Talk Product Guide](https://docs.coralproject.net/talk/how-talk-works).
-## Relevant Links
+## Pre-Launch Guide
+You’ve installed Talk on your server, and you’re preparing to launch it on your site. The real community work starts now, before you go live. You have a unique opportunity pre-launch to set your community up for success. Read our [Talk Community Guide](https://blog.coralproject.net/youve-installed-talk-now-what/).
+
+## More Resources
+
+- [Talk Product Roadmap](https://www.pivotaltracker.com/n/projects/1863625)
- [Our Blog](https://blog.coralproject.net/)
- [Community Forums](https://community.coralproject.net/)
- [Community Guides for Journalism](https://guides.coralproject.net/)
- [More About Us](https://coralproject.net/)
-- [Talk Roadmap](https://www.pivotaltracker.com/n/projects/1863625)
## End-to-End Testing
diff --git a/client/coral-admin/src/components/CommentFormatter.js b/client/coral-admin/src/components/CommentFormatter.js
deleted file mode 100644
index 8874d123f..000000000
--- a/client/coral-admin/src/components/CommentFormatter.js
+++ /dev/null
@@ -1,109 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { matchLinks } from '../utils';
-import memoize from 'lodash/memoize';
-
-function escapeRegExp(string) {
- return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
-}
-
-// generate a regulare expression that catches the `phrases`.
-function generateRegExp(phrases) {
- const inner = phrases
- .map(phrase =>
- phrase
- .split(/\s+/)
- .map(word => escapeRegExp(word))
- .join('[\\s"?!.]+')
- )
- .join('|');
-
- const pattern = `(^|[^\\w])(${inner})(?=[^\\w]|$)`;
- try {
- return new RegExp(pattern, 'iu');
- } catch (_err) {
- // IE does not support unicode support, so we'll create one without.
- return new RegExp(pattern, 'i');
- }
-}
-
-// Generate a regular expression detecting `suspectWords` and `bannedWords` phrases.
-function getPhrasesRegexp(suspectWords, bannedWords) {
- return generateRegExp([...suspectWords, ...bannedWords]);
-}
-
-// Memoized version as arguments rarely change.
-const getPhrasesRegexpMemoized = memoize(getPhrasesRegexp);
-
-// markPhrases looks for `supsectWords` and `bannedWords` inside `body` and highlights them by returning
-// an array of React Elements.
-function markPhrases(body, suspectWords, bannedWords, keyPrefix) {
- const regexp = getPhrasesRegexpMemoized(suspectWords, bannedWords);
- const tokens = body.split(regexp);
- return tokens.map(
- (token, i) =>
- i % 3 === 2 ? {token} : token
- );
-}
-
-// markLinks looks for links inside `body` and highlights them by returning
-// an array of React Elements.
-function markLinks(body) {
- const matches = matchLinks(body);
- const content = [];
- let index = 0;
- if (matches) {
- matches.forEach((match, i) => {
- content.push(body.substring(index, match.index));
- content.push({match.text});
- index = match.lastIndex;
- });
- }
- content.push(body.substring(index));
- return content;
-}
-
-const CommentFormatter = ({
- body,
- suspectWords,
- bannedWords,
- className = 'comment',
- ...rest
-}) => {
- // Breaking the body by line break
- const textbreaks = body.split('\n');
-
- return (
-
- {textbreaks.map((line, i) => {
- const content = markLinks(line).map((element, index) => {
- // Keep highlighted links.
- if (typeof element !== 'string') {
- return element;
- }
-
- // Highlight suspect and banned phrase inside this part of text.
- return markPhrases(element, suspectWords, bannedWords, index);
- });
-
- return (
-
- {content}
- {i !== textbreaks.length - 1 && (
-
- )}
-
- );
- })}
-
- );
-};
-
-CommentFormatter.propTypes = {
- className: PropTypes.string,
- bannedWords: PropTypes.array,
- suspectWords: PropTypes.array,
- body: PropTypes.string,
-};
-
-export default CommentFormatter;
diff --git a/client/coral-admin/src/components/Forbidden.css b/client/coral-admin/src/components/Forbidden.css
new file mode 100644
index 000000000..8f93cf869
--- /dev/null
+++ b/client/coral-admin/src/components/Forbidden.css
@@ -0,0 +1,8 @@
+.container {
+ max-width: 1280px;
+ margin: 0 auto;
+}
+
+.copy {
+ padding: 20px 0;
+}
\ No newline at end of file
diff --git a/client/coral-admin/src/components/Forbidden.js b/client/coral-admin/src/components/Forbidden.js
new file mode 100644
index 000000000..0c50e6d76
--- /dev/null
+++ b/client/coral-admin/src/components/Forbidden.js
@@ -0,0 +1,13 @@
+import React from 'react';
+import styles from './Forbidden.css';
+
+const Forbidden = () => (
+
+ This page is for team use only. Please contact an administrator if you + want to join this team. +
+- This page is for team use only. Please contact an administrator if - you want to join this team. -
+