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.
+
+
+);
+
+export default Forbidden;
diff --git a/client/coral-admin/src/components/Layout.css b/client/coral-admin/src/components/Layout.css
index ac13e96f7..9244c7c80 100644
--- a/client/coral-admin/src/components/Layout.css
+++ b/client/coral-admin/src/components/Layout.css
@@ -1,4 +1,6 @@
.layout {
margin: 0 auto;
background-color: #FAFAFA;
-}
+ height: inherit;
+ min-height: calc(100vh - 58px);
+}
\ No newline at end of file
diff --git a/client/coral-admin/src/containers/Layout.js b/client/coral-admin/src/containers/Layout.js
index aad9971c4..580b20f9b 100644
--- a/client/coral-admin/src/containers/Layout.js
+++ b/client/coral-admin/src/containers/Layout.js
@@ -11,6 +11,7 @@ import { logout } from 'coral-framework/actions/auth';
import { can } from 'coral-framework/services/perms';
import UserDetail from 'coral-admin/src/containers/UserDetail';
import PropTypes from 'prop-types';
+import Forbidden from '../components/Forbidden';
class LayoutContainer extends React.Component {
render() {
@@ -47,10 +48,7 @@ class LayoutContainer extends React.Component {
} else {
return (
-
- This page is for team use only. Please contact an administrator if
- you want to join this team.
-
+
);
}
diff --git a/client/coral-admin/src/routes/Moderation/components/ModerationQueue.css b/client/coral-admin/src/routes/Moderation/components/ModerationQueue.css
index 465c7ccbd..cef4184db 100644
--- a/client/coral-admin/src/routes/Moderation/components/ModerationQueue.css
+++ b/client/coral-admin/src/routes/Moderation/components/ModerationQueue.css
@@ -6,10 +6,6 @@
margin-top: 16px;
}
-:global(html) {
- height: inherit;
-}
-
.list {
outline: none;
}
diff --git a/client/coral-embed-stream/src/tabs/stream/components/Stream.js b/client/coral-embed-stream/src/tabs/stream/components/Stream.js
index 75f04da0a..cc4e8e939 100644
--- a/client/coral-embed-stream/src/tabs/stream/components/Stream.js
+++ b/client/coral-embed-stream/src/tabs/stream/components/Stream.js
@@ -15,14 +15,13 @@ import QuestionBox from '../../../components/QuestionBox';
import { Tab, TabCount, TabPane } from 'coral-ui';
import cn from 'classnames';
import get from 'lodash/get';
-
import { reverseCommentParentTree } from '../../../graphql/utils';
import AllCommentsPane from './AllCommentsPane';
import ExtendableTabPanel from '../../../containers/ExtendableTabPanel';
+import ChangedUsername from './ChangedUsername';
+import CommentNotFound from '../containers/CommentNotFound';
import styles from './Stream.css';
-import ChangedUsername from './ChangedUsername';
-
class Stream extends React.Component {
constructor(props) {
super(props);
@@ -238,7 +237,11 @@ class Stream extends React.Component {
keepCommentBox);
if (highlightedComment === null) {
- return {t('stream.comment_not_found')};
+ return (
+
+
+
+ );
}
const slotPassthrough = { root, asset };
diff --git a/client/coral-embed-stream/src/tabs/stream/containers/CommentNotFound.js b/client/coral-embed-stream/src/tabs/stream/containers/CommentNotFound.js
new file mode 100644
index 000000000..91537aac4
--- /dev/null
+++ b/client/coral-embed-stream/src/tabs/stream/containers/CommentNotFound.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { Button } from 'coral-ui';
+import { setActiveTab } from '../../../actions/embed';
+import { bindActionCreators } from 'redux';
+import { connect } from 'react-redux';
+import t from 'coral-framework/services/i18n';
+
+class CommentNotFound extends React.Component {
+ showAllTab = () => {
+ this.props.setActiveTab('all');
+ };
+
+ render() {
+ return (
+
+
{t('stream.comment_not_found')}
+
+
+ );
+ }
+}
+
+CommentNotFound.propTypes = {
+ setActiveTab: PropTypes.func,
+};
+
+const mapDispatchToProps = dispatch =>
+ bindActionCreators(
+ {
+ setActiveTab,
+ },
+ dispatch
+ );
+
+export default connect(null, mapDispatchToProps)(CommentNotFound);
diff --git a/docs/source/api/server.md b/docs/source/api/server.md
index 821b4b24f..d25487c2d 100644
--- a/docs/source/api/server.md
+++ b/docs/source/api/server.md
@@ -377,7 +377,11 @@ en:
Which overrides the copy for the `embedlink.copy` template. You can
also provide other languages as well by using the correct language
-prefix.
+prefix.
+
+When creating a plugin using this `translations` hook to override copy
+from another plugin, be sure to list it after the plugin it's overriding
+in the `plugins.json` file.
### websockets
diff --git a/views/admin.ejs b/views/admin.ejs
index 1ecca390e..979e2ec41 100644
--- a/views/admin.ejs
+++ b/views/admin.ejs
@@ -4,17 +4,8 @@
Talk - Coral Admin