* Put poll options behind CWs in WebUI * Put polls behind CWs on public pages * Add poll icon to public pages CWs * Revert to not showing an icon in the CW buttonmaster^2
@@ -16,7 +16,6 @@ import { MediaGallery, Video } from '../features/ui/util/async-components'; | |||
import { HotKeys } from 'react-hotkeys'; | |||
import classNames from 'classnames'; | |||
import Icon from 'mastodon/components/icon'; | |||
import PollContainer from 'mastodon/containers/poll_container'; | |||
import { displayMedia } from '../initial_state'; | |||
// We use the component (and not the container) since we do not want | |||
@@ -321,9 +320,7 @@ class Status extends ImmutablePureComponent { | |||
status = status.get('reblog'); | |||
} | |||
if (status.get('poll')) { | |||
media = <PollContainer pollId={status.get('poll')} />; | |||
} else if (status.get('media_attachments').size > 0) { | |||
if (status.get('media_attachments').size > 0) { | |||
if (this.props.muted) { | |||
media = ( | |||
<AttachmentList | |||
@@ -5,6 +5,7 @@ import { isRtl } from '../rtl'; | |||
import { FormattedMessage } from 'react-intl'; | |||
import Permalink from './permalink'; | |||
import classnames from 'classnames'; | |||
import PollContainer from 'mastodon/containers/poll_container'; | |||
import Icon from 'mastodon/components/icon'; | |||
const MAX_HEIGHT = 642; // 20px * 32 (+ 2px padding at the top) | |||
@@ -191,6 +192,8 @@ export default class StatusContent extends React.PureComponent { | |||
{mentionsPlaceholder} | |||
<div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} lang={status.get('language')} /> | |||
{!hidden && !!status.get('poll') && <PollContainer pollId={status.get('poll')} />} | |||
</div> | |||
); | |||
} else if (this.props.onClick) { | |||
@@ -212,9 +215,13 @@ export default class StatusContent extends React.PureComponent { | |||
output.push(readMoreButton); | |||
} | |||
if (status.get('poll')) { | |||
output.push(<PollContainer pollId={status.get('poll')} />); | |||
} | |||
return output; | |||
} else { | |||
return ( | |||
const output = [ | |||
<div | |||
tabIndex='0' | |||
ref={this.setRef} | |||
@@ -222,8 +229,14 @@ export default class StatusContent extends React.PureComponent { | |||
style={directionStyle} | |||
dangerouslySetInnerHTML={content} | |||
lang={status.get('language')} | |||
/> | |||
); | |||
/>, | |||
]; | |||
if (status.get('poll')) { | |||
output.push(<PollContainer pollId={status.get('poll')} />); | |||
} | |||
return output; | |||
} | |||
} | |||
@@ -13,7 +13,6 @@ import Video from '../../video'; | |||
import scheduleIdleTask from '../../ui/util/schedule_idle_task'; | |||
import classNames from 'classnames'; | |||
import Icon from 'mastodon/components/icon'; | |||
import PollContainer from 'mastodon/containers/poll_container'; | |||
export default class DetailedStatus extends ImmutablePureComponent { | |||
@@ -107,9 +106,7 @@ export default class DetailedStatus extends ImmutablePureComponent { | |||
outerStyle.height = `${this.state.height}px`; | |||
} | |||
if (status.get('poll')) { | |||
media = <PollContainer pollId={status.get('poll')} />; | |||
} else if (status.get('media_attachments').size > 0) { | |||
if (status.get('media_attachments').size > 0) { | |||
if (status.getIn(['media_attachments', 0, 'type']) === 'video') { | |||
const video = status.getIn(['media_attachments', 0]); | |||
@@ -126,15 +126,15 @@ function main() { | |||
return false; | |||
}); | |||
delegate(document, '.status__content__spoiler-link', 'click', ({ target }) => { | |||
const contentEl = target.parentNode.parentNode.querySelector('.e-content'); | |||
delegate(document, '.status__content__spoiler-link', 'click', function() { | |||
const contentEl = this.parentNode.parentNode.querySelector('.e-content'); | |||
if (contentEl.style.display === 'block') { | |||
contentEl.style.display = 'none'; | |||
target.parentNode.style.marginBottom = 0; | |||
this.parentNode.style.marginBottom = 0; | |||
} else { | |||
contentEl.style.display = 'block'; | |||
target.parentNode.style.marginBottom = null; | |||
this.parentNode.style.marginBottom = null; | |||
} | |||
return false; | |||
@@ -19,13 +19,14 @@ | |||
- if status.spoiler_text? | |||
%p{ :style => ('margin-bottom: 0' unless current_account&.user&.setting_expand_spoilers) }< | |||
%span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)} | |||
%a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more') | |||
.e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay) | |||
%button.status__content__spoiler-link= t('statuses.show_more') | |||
.e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" } | |||
= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay) | |||
- if status.preloadable_poll | |||
= react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do | |||
= render partial: 'stream_entries/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay } | |||
- if status.preloadable_poll | |||
= react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do | |||
= render partial: 'stream_entries/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay } | |||
- elsif !status.media_attachments.empty? | |||
- if !status.media_attachments.empty? | |||
- if status.media_attachments.first.video? | |||
- video = status.media_attachments.first | |||
= react_component :video, src: video.file.url(:original), preview: video.file.url(:small), blurhash: video.blurhash, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 670, height: 380, detailed: true, inline: true, alt: video.description do | |||
@@ -23,13 +23,14 @@ | |||
- if status.spoiler_text? | |||
%p{ :style => ('margin-bottom: 0' unless current_account&.user&.setting_expand_spoilers) }< | |||
%span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)} | |||
%a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more') | |||
.e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay) | |||
%button.status__content__spoiler-link= t('statuses.show_more') | |||
.e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" } | |||
= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay) | |||
- if status.preloadable_poll | |||
= react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do | |||
= render partial: 'stream_entries/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay } | |||
- if status.preloadable_poll | |||
= react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do | |||
= render partial: 'stream_entries/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay } | |||
- elsif !status.media_attachments.empty? | |||
- if !status.media_attachments.empty? | |||
- if status.media_attachments.first.video? | |||
- video = status.media_attachments.first | |||
= react_component :video, src: video.file.url(:original), preview: video.file.url(:small), blurhash: video.blurhash, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 610, height: 343, inline: true, alt: video.description do | |||