[Glitch] Add support for custom emojis in poll options
Fixes #956
Port 80f0910e21 to glitch-soc
			
			
This commit is contained in:
		| @@ -69,9 +69,11 @@ export function normalizeStatus(status, normalOldStatus) { | ||||
| export function normalizePoll(poll) { | ||||
|   const normalPoll = { ...poll }; | ||||
|  | ||||
|   const emojiMap = makeEmojiMap(normalPoll); | ||||
|  | ||||
|   normalPoll.options = poll.options.map(option => ({ | ||||
|     ...option, | ||||
|     title_emojified: emojify(escapeTextContentForBrowser(option.title)), | ||||
|     title_emojified: emojify(escapeTextContentForBrowser(option.title), emojiMap), | ||||
|   })); | ||||
|  | ||||
|   return normalPoll; | ||||
|   | ||||
| @@ -44,6 +44,11 @@ const timeRemainingString = (intl, date, now) => { | ||||
|   return relativeTime; | ||||
| }; | ||||
|  | ||||
| const makeEmojiMap = record => record.get('emojis').reduce((obj, emoji) => { | ||||
|   obj[`:${emoji.get('shortcode')}:`] = emoji.toJS(); | ||||
|   return obj; | ||||
| }, {}); | ||||
|  | ||||
| export default @injectIntl | ||||
| class Poll extends ImmutablePureComponent { | ||||
|  | ||||
| @@ -99,6 +104,12 @@ class Poll extends ImmutablePureComponent { | ||||
|     const active             = !!this.state.selected[`${optionIndex}`]; | ||||
|     const showResults        = poll.get('voted') || poll.get('expired'); | ||||
|  | ||||
|     let titleEmojified = option.get('title_emojified'); | ||||
|     if (!titleEmojified) { | ||||
|       const emojiMap = makeEmojiMap(poll); | ||||
|       titleEmojified = emojify(escapeTextContentForBrowser(option.get('title')), emojiMap); | ||||
|     } | ||||
|  | ||||
|     return ( | ||||
|       <li key={option.get('title')}> | ||||
|         {showResults && ( | ||||
| @@ -122,7 +133,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', emojify(escapeTextContentForBrowser(option.get('title')))) }} /> | ||||
|           <span dangerouslySetInnerHTML={{ __html: titleEmojified }} /> | ||||
|         </label> | ||||
|       </li> | ||||
|     ); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user