about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2019-03-06 05:35:52 +0100
committerGitHub <noreply@github.com>2019-03-06 05:35:52 +0100
commitfd128b9c7aa5c71adbfc2e223212514c0baee675 (patch)
treef88c6d60286250b7d77c1f545330eda2849cdd04 /app
parent57643557b64bc1853c4aeb65fc652dac3467fa18 (diff)
Fix poll options not rendering text after vote/refresh (#10189)
* Fix poll options not rendering text after vote/refresh

* Fix poll options not showing up on public pages

* Fix code style issue
Diffstat (limited to 'app')
-rw-r--r--app/javascript/mastodon/actions/importer/index.js6
-rw-r--r--app/javascript/mastodon/actions/polls.js11
-rw-r--r--app/javascript/mastodon/components/poll.js4
-rw-r--r--app/javascript/mastodon/reducers/polls.js4
4 files changed, 18 insertions, 7 deletions
diff --git a/app/javascript/mastodon/actions/importer/index.js b/app/javascript/mastodon/actions/importer/index.js
index e990dc04c..f4372fb31 100644
--- a/app/javascript/mastodon/actions/importer/index.js
+++ b/app/javascript/mastodon/actions/importer/index.js
@@ -82,3 +82,9 @@ export function importFetchedStatuses(statuses) {
     dispatch(importStatuses(normalStatuses));
   };
 }
+
+export function importFetchedPoll(poll) {
+  return dispatch => {
+    dispatch(importPolls([normalizePoll(poll)]));
+  };
+}
diff --git a/app/javascript/mastodon/actions/polls.js b/app/javascript/mastodon/actions/polls.js
index bee4c48a6..8e8b82df5 100644
--- a/app/javascript/mastodon/actions/polls.js
+++ b/app/javascript/mastodon/actions/polls.js
@@ -1,4 +1,5 @@
 import api from '../api';
+import { importFetchedPoll } from './importer';
 
 export const POLL_VOTE_REQUEST = 'POLL_VOTE_REQUEST';
 export const POLL_VOTE_SUCCESS = 'POLL_VOTE_SUCCESS';
@@ -12,7 +13,10 @@ export const vote = (pollId, choices) => (dispatch, getState) => {
   dispatch(voteRequest());
 
   api(getState).post(`/api/v1/polls/${pollId}/votes`, { choices })
-    .then(({ data }) => dispatch(voteSuccess(data)))
+    .then(({ data }) => {
+      dispatch(importFetchedPoll(data));
+      dispatch(voteSuccess(data));
+    })
     .catch(err => dispatch(voteFail(err)));
 };
 
@@ -20,7 +24,10 @@ export const fetchPoll = pollId => (dispatch, getState) => {
   dispatch(fetchPollRequest());
 
   api(getState).get(`/api/v1/polls/${pollId}`)
-    .then(({ data }) => dispatch(fetchPollSuccess(data)))
+    .then(({ data }) => {
+      dispatch(importFetchedPoll(data));
+      dispatch(fetchPollSuccess(data));
+    })
     .catch(err => dispatch(fetchPollFail(err)));
 };
 
diff --git a/app/javascript/mastodon/components/poll.js b/app/javascript/mastodon/components/poll.js
index c52445c86..bfff7b601 100644
--- a/app/javascript/mastodon/components/poll.js
+++ b/app/javascript/mastodon/components/poll.js
@@ -7,6 +7,8 @@ import classNames from 'classnames';
 import { vote, fetchPoll } from 'mastodon/actions/polls';
 import Motion from 'mastodon/features/ui/util/optional_motion';
 import spring from 'react-motion/lib/spring';
+import escapeTextContentForBrowser from 'escape-html';
+import emojify from 'mastodon/features/emoji/emoji';
 
 const messages = defineMessages({
   moments: { id: 'time_remaining.moments', defaultMessage: 'Moments remaining' },
@@ -120,7 +122,7 @@ class Poll extends ImmutablePureComponent {
           {!showResults && <span className={classNames('poll__input', { checkbox: poll.get('multiple'), active })} />}
           {showResults && <span className='poll__number'>{Math.round(percent)}%</span>}
 
-          <span dangerouslySetInnerHTML={{ __html: option.get('title_emojified') }} />
+          <span dangerouslySetInnerHTML={{ __html: option.get('title_emojified', emojify(escapeTextContentForBrowser(option.get('title')))) }} />
         </label>
       </li>
     );
diff --git a/app/javascript/mastodon/reducers/polls.js b/app/javascript/mastodon/reducers/polls.js
index 53d9b1d8c..9956cf83f 100644
--- a/app/javascript/mastodon/reducers/polls.js
+++ b/app/javascript/mastodon/reducers/polls.js
@@ -1,4 +1,3 @@
-import { POLL_VOTE_SUCCESS, POLL_FETCH_SUCCESS } from 'mastodon/actions/polls';
 import { POLLS_IMPORT } from 'mastodon/actions/importer';
 import { Map as ImmutableMap, fromJS } from 'immutable';
 
@@ -10,9 +9,6 @@ export default function polls(state = initialState, action) {
   switch(action.type) {
   case POLLS_IMPORT:
     return importPolls(state, action.polls);
-  case POLL_VOTE_SUCCESS:
-  case POLL_FETCH_SUCCESS:
-    return importPolls(state, [action.poll]);
   default:
     return state;
   }