[Glitch] Fix poll options not being selectable via keyboard
Port c05ed8a6254bc82fda3ae0fd3934dc2cdcf7c82d to glitch-soc Signed-off-by: Thibaut Girka <thib@sitedethib.com>
This commit is contained in:
		
							parent
							
								
									1e1293e3c8
								
							
						
					
					
						commit
						c6ba870f00
					
				@ -67,9 +67,7 @@ class Poll extends ImmutablePureComponent {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleOptionChange = e => {
 | 
					  _toggleOption = value => {
 | 
				
			||||||
    const { target: { value } } = e;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (this.props.poll.get('multiple')) {
 | 
					    if (this.props.poll.get('multiple')) {
 | 
				
			||||||
      const tmp = { ...this.state.selected };
 | 
					      const tmp = { ...this.state.selected };
 | 
				
			||||||
      if (tmp[value]) {
 | 
					      if (tmp[value]) {
 | 
				
			||||||
@ -83,8 +81,20 @@ class Poll extends ImmutablePureComponent {
 | 
				
			|||||||
      tmp[value] = true;
 | 
					      tmp[value] = true;
 | 
				
			||||||
      this.setState({ selected: tmp });
 | 
					      this.setState({ selected: tmp });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  handleOptionChange = ({ target: { value } }) => {
 | 
				
			||||||
 | 
					    this._toggleOption(value);
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  handleOptionKeyPress = (e) => {
 | 
				
			||||||
 | 
					    if (e.key === 'Enter' || e.key === ' ') {
 | 
				
			||||||
 | 
					      this._toggleOption(e.target.getAttribute('data-index'));
 | 
				
			||||||
 | 
					      e.stopPropagation();
 | 
				
			||||||
 | 
					      e.preventDefault();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleVote = () => {
 | 
					  handleVote = () => {
 | 
				
			||||||
    if (this.props.disabled) {
 | 
					    if (this.props.disabled) {
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
@ -135,7 +145,17 @@ class Poll extends ImmutablePureComponent {
 | 
				
			|||||||
            disabled={disabled}
 | 
					            disabled={disabled}
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          {!showResults && <span className={classNames('poll__input', { checkbox: poll.get('multiple'), active })} />}
 | 
					          {!showResults && (
 | 
				
			||||||
 | 
					            <span
 | 
				
			||||||
 | 
					              className={classNames('poll__input', { checkbox: poll.get('multiple'), active })}
 | 
				
			||||||
 | 
					              tabIndex='0'
 | 
				
			||||||
 | 
					              role={poll.get('multiple') ? 'checkbox' : 'radio'}
 | 
				
			||||||
 | 
					              onKeyPress={this.handleOptionKeyPress}
 | 
				
			||||||
 | 
					              aria-checked={active}
 | 
				
			||||||
 | 
					              aria-label={option.get('title')}
 | 
				
			||||||
 | 
					              data-index={optionIndex}
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					          )}
 | 
				
			||||||
          {showResults && <span className='poll__number'>
 | 
					          {showResults && <span className='poll__number'>
 | 
				
			||||||
            {!!voted && <Icon id='check' className='poll__vote__mark' title={intl.formatMessage(messages.voted)} />}
 | 
					            {!!voted && <Icon id='check' className='poll__vote__mark' title={intl.formatMessage(messages.voted)} />}
 | 
				
			||||||
            {Math.round(percent)}%
 | 
					            {Math.round(percent)}%
 | 
				
			||||||
 | 
				
			|||||||
@ -98,6 +98,23 @@
 | 
				
			|||||||
      border-color: $valid-value-color;
 | 
					      border-color: $valid-value-color;
 | 
				
			||||||
      background: $valid-value-color;
 | 
					      background: $valid-value-color;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    &:active,
 | 
				
			||||||
 | 
					    &:focus,
 | 
				
			||||||
 | 
					    &:hover {
 | 
				
			||||||
 | 
					      border-width: 4px;
 | 
				
			||||||
 | 
					      background: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    &::-moz-focus-inner {
 | 
				
			||||||
 | 
					      outline: 0 !important;
 | 
				
			||||||
 | 
					      border: 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    &:focus,
 | 
				
			||||||
 | 
					    &:active {
 | 
				
			||||||
 | 
					      outline: 0 !important;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  &__number {
 | 
					  &__number {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user