[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