@@ -32,25 +33,31 @@ export default ({handleChange, handleApply, changed, ...props}) => (
title: lang.t('configureCommentStream.enablePremod'),
description: lang.t('configureCommentStream.enablePremodDescription')
}} />
- {/* To be implimented
-
- */}
+
+
+
+
+
+
+
+
-
);
diff --git a/client/coral-configure/containers/ConfigureStreamContainer.js b/client/coral-configure/containers/ConfigureStreamContainer.js
index dfe94de42..219e4d99e 100644
--- a/client/coral-configure/containers/ConfigureStreamContainer.js
+++ b/client/coral-configure/containers/ConfigureStreamContainer.js
@@ -21,18 +21,23 @@ class ConfigureStreamContainer extends Component {
this.toggleStatus = this.toggleStatus.bind(this);
this.handleChange = this.handleChange.bind(this);
this.handleApply = this.handleApply.bind(this);
+ this.updateQuestionBoxContent = this.updateQuestionBoxContent.bind(this);
}
handleApply (e) {
e.preventDefault();
const {elements} = e.target;
const premod = elements.premod.checked;
+ const questionBoxEnable = elements.qboxenable.checked;
+ const questionBoxContent = elements.qboxcontent.value;
// const premodLinks = elements.premodLinks.checked;
const {changed} = this.state;
const newConfig = {
- moderation: premod ? 'PRE' : 'POST'
+ moderation: premod ? 'PRE' : 'POST',
+ questionBoxEnable,
+ questionBoxContent
};
if (changed) {
@@ -45,12 +50,20 @@ class ConfigureStreamContainer extends Component {
}
}
- handleChange () {
+ handleChange (e) {
+ if (e.target && e.target.id === 'qboxenable') {
+ this.props.asset.settings.questionBoxEnable = e.target.checked;
+ }
this.setState({
changed: true
});
}
+ updateQuestionBoxContent(e) {
+ this.props.asset.settings.questionBoxContent = e.target.value;
+ this.handleChange(e);
+ }
+
toggleStatus () {
this.props.updateStatus(
this.props.asset.closedAt === null ? 'closed' : 'open'
@@ -66,6 +79,8 @@ class ConfigureStreamContainer extends Component {
render () {
const status = this.props.asset.closedAt === null ? 'open' : 'closed';
const premod = this.props.asset.settings.moderation === 'PRE';
+ const questionBoxEnable = this.props.asset.settings.questionBoxEnable;
+ const questionBoxContent = this.props.asset.settings.questionBoxContent;
return (
@@ -75,6 +90,9 @@ class ConfigureStreamContainer extends Component {
changed={this.state.changed}
premodLinks={false}
premod={premod}
+ updateQuestionBoxContent={this.updateQuestionBoxContent}
+ questionBoxEnable={questionBoxEnable}
+ questionBoxContent={questionBoxContent}
/>
{status === 'open' ? 'Close' : 'Open'} Comment Stream
@@ -94,7 +112,7 @@ const mapStateToProps = (state) => ({
const mapDispatchToProps = dispatch => ({
updateStatus: status => dispatch(updateOpenStatus(status)),
- updateConfiguration: newConfig => dispatch(updateConfiguration(newConfig))
+ updateConfiguration: newConfig => dispatch(updateConfiguration(newConfig)),
});
export default compose(
diff --git a/client/coral-configure/translations.json b/client/coral-configure/translations.json
index 5aa7f72b6..a40c12bc1 100644
--- a/client/coral-configure/translations.json
+++ b/client/coral-configure/translations.json
@@ -7,18 +7,24 @@
"enablePremod": "Enable Premoderation",
"enablePremodDescription": "Moderators must approve any comment before its published.",
"enablePremodLinks": "Pre-Moderate Comments Containing Links",
- "enablePremodLinksDescription": "Moderators must approve any comment containing a link before its published."
+ "enablePremodLinksDescription": "Moderators must approve any comment containing a link before its published.",
+ "enableQuestionBox": "Ask readers a question",
+ "enableQuestionBoxDescription": "This question will appear at the top of this comment stram. Ask readers about a certain issue in the article or pose discussion questions, etc.",
+ "includeQuestionHere": "Write your question here."
}
},
"es": {
"configureCommentStream": {
"apply": "Aplicar",
"title": "Configurar los comentarios",
- "description": "Como Administrador puedes modificar las opciones de los comentarios en este artículo",
+ "description": "Como Administrador/a puedes modificar las opciones de los comentarios en este artículo",
"enablePremod": "Activar Pre Moderación",
- "enablePremodDescription": "Los Moderadores deben aprobar cualquier comentario antes de su publicación",
+ "enablePremodDescription": "Los y las Moderadoras deben aprobar cualquier comentario antes de su publicación",
"enablePremodLinks": "Pre-Moderar Commentarios que contienen Links",
- "enablePremodLinksDescription": "Los Moderadores deben probar cualquier comentario que contengan links antes de su publicación."
+ "enablePremodLinksDescription": "Los y las Moderadoras deben probar cualquier comentario que contengan links antes de su publicación.",
+ "enableQuestionBox": "Hacer una pregunta a los y las lectoras.",
+ "enableQuestionBoxDescription": "Esta pregunta aparecera en la parte de arriba del hilo de comentarios.",
+ "includeQuestionHere": "Escribir la pregunta aquí."
}
}
}
diff --git a/client/coral-embed-stream/src/Comment.js b/client/coral-embed-stream/src/Comment.js
index 48dd52d09..9d679473e 100644
--- a/client/coral-embed-stream/src/Comment.js
+++ b/client/coral-embed-stream/src/Comment.js
@@ -17,6 +17,7 @@ import PubDate from 'coral-plugin-pubdate/PubDate';
import {ReplyBox, ReplyButton} from 'coral-plugin-replies';
import FlagComment from 'coral-plugin-flags/FlagComment';
import LikeButton from 'coral-plugin-likes/LikeButton';
+import LoadMore from 'coral-embed-stream/src/LoadMore';
import styles from './Comment.css';
@@ -89,6 +90,7 @@ class Comment extends React.Component {
showSignInDialog,
postLike,
postFlag,
+ loadMore,
setActiveReplyBox,
activeReplyBox,
deleteAction
@@ -171,6 +173,17 @@ class Comment extends React.Component {
comment={reply} />;
})
}
+ {
+ comment.replies &&
+
+ comment.replies.length}
+ loadMore={loadMore}/>
+
+ }
);
}
diff --git a/client/coral-embed-stream/src/Embed.js b/client/coral-embed-stream/src/Embed.js
index 87f471bc1..8f91b0eb1 100644
--- a/client/coral-embed-stream/src/Embed.js
+++ b/client/coral-embed-stream/src/Embed.js
@@ -16,6 +16,7 @@ import {Notification, notificationActions, authActions, assetActions, pym} from
import Stream from './Stream';
import InfoBox from 'coral-plugin-infobox/InfoBox';
+import QuestionBox from 'coral-plugin-questionbox/QuestionBox';
import {ModerationLink} from 'coral-plugin-moderation';
import Count from 'coral-plugin-comment-count/CommentCount';
import CommentBox from 'coral-plugin-commentbox/CommentBox';
@@ -114,6 +115,10 @@ class Embed extends Component {
content={asset.settings.infoBoxContent}
enable={asset.settings.infoBoxEnable}
/>
+
diff --git a/client/coral-embed-stream/src/LoadMore.js b/client/coral-embed-stream/src/LoadMore.js
index 803f544bd..89708272a 100644
--- a/client/coral-embed-stream/src/LoadMore.js
+++ b/client/coral-embed-stream/src/LoadMore.js
@@ -1,28 +1,34 @@
import React, {PropTypes} from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import translations from 'coral-framework/translations.json';
+import {ADDTL_COMMENTS_ON_LOAD_MORE} from 'coral-framework/constants/comments';
import {Button} from 'coral-ui';
const lang = new I18n(translations);
-const loadMoreComments = (assetId, comments, loadMore) => {
+const loadMoreComments = (assetId, comments, loadMore, parentId) => {
if (!comments.length) {
return;
}
+ const cursor = parentId
+ ? comments[1].created_at
+ : comments[comments.length - 1].created_at;
+
loadMore({
- limit: 10,
- cursor: comments[comments.length - 1].created_at,
+ limit: ADDTL_COMMENTS_ON_LOAD_MORE,
+ cursor,
assetId,
- sort: 'REVERSE_CHRONOLOGICAL'
+ parent_id: parentId,
+ sort: parentId ? 'CHRONOLOGICAL' : 'REVERSE_CHRONOLOGICAL'
});
};
-const LoadMore = ({assetId, comments, loadMore, moreComments}) => (
+const LoadMore = ({assetId, comments, loadMore, moreComments, parentId}) => (
moreComments
?