Merge branch 'master' into glitch-soc/merge-upstream

Conflicts:
- app/services/remove_status_service.rb
  Conflict because we still handle the direct timeline.
  Took upstream changes, with that one extra function call.
- config/locales/ca.yml
  Conflict because theme names were updated.
  Decided to *keep* the theme names even if they are useless
  to avoid future conflicts.
- config/locales/oc.yml
  Decided to *keep* the theme names even if they are useless
  to avoid future conflicts.
- config/locales/pl.yml
  Decided to *keep* the theme names even if they are useless
  to avoid future conflicts.
This commit is contained in:
Thibaut Girka
2019-03-16 20:59:33 +01:00
97 changed files with 1876 additions and 535 deletions

View File

@ -50,6 +50,7 @@ class ModifierPickerMenu extends React.PureComponent {
active: PropTypes.bool,
onSelect: PropTypes.func.isRequired,
onClose: PropTypes.func.isRequired,
modifier: PropTypes.number,
};
handleClick = e => {
@ -86,20 +87,36 @@ class ModifierPickerMenu extends React.PureComponent {
setRef = c => {
this.node = c;
if (this.node) {
this.node.querySelector('li:first-child button').focus(); // focus the first element when opened
}
}
render () {
const { active } = this.props;
const { active, modifier } = this.props;
return (
<div className='emoji-picker-dropdown__modifiers__menu' style={{ display: active ? 'block' : 'none' }} ref={this.setRef}>
<button onClick={this.handleClick} data-index={1}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={1} backgroundImageFn={backgroundImageFn} /></button>
<button onClick={this.handleClick} data-index={2}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={2} backgroundImageFn={backgroundImageFn} /></button>
<button onClick={this.handleClick} data-index={3}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={3} backgroundImageFn={backgroundImageFn} /></button>
<button onClick={this.handleClick} data-index={4}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={4} backgroundImageFn={backgroundImageFn} /></button>
<button onClick={this.handleClick} data-index={5}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={5} backgroundImageFn={backgroundImageFn} /></button>
<button onClick={this.handleClick} data-index={6}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={6} backgroundImageFn={backgroundImageFn} /></button>
</div>
<ul
className='emoji-picker-dropdown__modifiers__menu'
style={{ display: active ? 'block' : 'none' }}
role='menuitem'
ref={this.setRef}
>
{[1, 2, 3, 4, 5, 6].map(i => (
<li
onClick={this.handleClick}
role='menuitemradio'
aria-checked={i === (modifier || 1)}
data-index={i}
key={i}
>
<Emoji
emoji='fist' set='twitter' size={22} sheetSize={32} skin={i}
backgroundImageFn={backgroundImageFn}
/>
</li>
))}
</ul>
);
}
@ -131,10 +148,22 @@ class ModifierPicker extends React.PureComponent {
render () {
const { active, modifier } = this.props;
function setRef(ref) {
if (!ref) {
return;
}
// TODO: It would be nice if we could pass props directly to emoji-mart's buttons.
const button = ref.querySelector('button');
button.setAttribute('aria-haspopup', 'true');
button.setAttribute('aria-expanded', active);
}
return (
<div className='emoji-picker-dropdown__modifiers'>
<Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={modifier} onClick={this.handleClick} backgroundImageFn={backgroundImageFn} />
<ModifierPickerMenu active={active} onSelect={this.handleSelect} onClose={this.props.onClose} />
<div ref={setRef}>
<Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={modifier} onClick={this.handleClick} backgroundImageFn={backgroundImageFn} />
</div>
<ModifierPickerMenu active={active} modifier={modifier} onSelect={this.handleSelect} onClose={this.props.onClose} />
</div>
);
}

View File

@ -48,7 +48,7 @@ class Option extends React.PureComponent {
<input
type='text'
placeholder={intl.formatMessage(messages.option_placeholder, { number: index + 1 })}
maxlength={25}
maxLength={25}
value={title}
onChange={this.handleOptionTitleChange}
/>