forked from cybrespace/mastodon
Fixes to the polls UI (#10150)
* Allow unselecting choices in multiple choice polls * Properly disable checkboxes/radio buttons for polls in public pages * Visually differentiate checkboxes and radio buttons
This commit is contained in:
parent
1a7de769a3
commit
4ced609497
|
@ -60,7 +60,11 @@ class Poll extends ImmutablePureComponent {
|
||||||
|
|
||||||
if (this.props.poll.get('multiple')) {
|
if (this.props.poll.get('multiple')) {
|
||||||
const tmp = { ...this.state.selected };
|
const tmp = { ...this.state.selected };
|
||||||
tmp[value] = true;
|
if (tmp[value]) {
|
||||||
|
delete tmp[value];
|
||||||
|
} else {
|
||||||
|
tmp[value] = true;
|
||||||
|
}
|
||||||
this.setState({ selected: tmp });
|
this.setState({ selected: tmp });
|
||||||
} else {
|
} else {
|
||||||
const tmp = {};
|
const tmp = {};
|
||||||
|
@ -86,11 +90,11 @@ class Poll extends ImmutablePureComponent {
|
||||||
};
|
};
|
||||||
|
|
||||||
renderOption (option, optionIndex) {
|
renderOption (option, optionIndex) {
|
||||||
const { poll } = this.props;
|
const { poll, disabled } = this.props;
|
||||||
const percent = (option.get('votes_count') / poll.get('votes_count')) * 100;
|
const percent = (option.get('votes_count') / poll.get('votes_count')) * 100;
|
||||||
const leading = poll.get('options').filterNot(other => other.get('title') === option.get('title')).every(other => option.get('votes_count') > other.get('votes_count'));
|
const leading = poll.get('options').filterNot(other => other.get('title') === option.get('title')).every(other => option.get('votes_count') > other.get('votes_count'));
|
||||||
const active = !!this.state.selected[`${optionIndex}`];
|
const active = !!this.state.selected[`${optionIndex}`];
|
||||||
const showResults = poll.get('voted') || poll.get('expired');
|
const showResults = poll.get('voted') || poll.get('expired');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<li key={option.get('title')}>
|
<li key={option.get('title')}>
|
||||||
|
@ -109,9 +113,10 @@ class Poll extends ImmutablePureComponent {
|
||||||
value={optionIndex}
|
value={optionIndex}
|
||||||
checked={active}
|
checked={active}
|
||||||
onChange={this.handleOptionChange}
|
onChange={this.handleOptionChange}
|
||||||
|
disabled={disabled}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{!showResults && <span className={classNames('poll__input', { active })} />}
|
{!showResults && <span className={classNames('poll__input', { checkbox: poll.get('multiple'), active })} />}
|
||||||
{showResults && <span className='poll__number'>{Math.floor(percent)}%</span>}
|
{showResults && <span className='poll__number'>{Math.floor(percent)}%</span>}
|
||||||
|
|
||||||
{option.get('title')}
|
{option.get('title')}
|
||||||
|
|
|
@ -47,9 +47,13 @@
|
||||||
height: 18px;
|
height: 18px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
top: -1px;
|
top: -1px;
|
||||||
border-radius: 4px;
|
border-radius: 50%;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
|
||||||
|
&.checkbox {
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
border-color: $valid-value-color;
|
border-color: $valid-value-color;
|
||||||
background: $valid-value-color;
|
background: $valid-value-color;
|
||||||
|
|
Loading…
Reference in New Issue