forked from treehouse/mastodon
parent
e900b03e38
commit
49bea8c46b
|
@ -129,6 +129,7 @@ class ModifierPickerMenu extends React.PureComponent {
|
||||||
active: PropTypes.bool,
|
active: PropTypes.bool,
|
||||||
onSelect: PropTypes.func.isRequired,
|
onSelect: PropTypes.func.isRequired,
|
||||||
onClose: PropTypes.func.isRequired,
|
onClose: PropTypes.func.isRequired,
|
||||||
|
modifier: PropTypes.number,
|
||||||
};
|
};
|
||||||
|
|
||||||
handleClick = e => {
|
handleClick = e => {
|
||||||
|
@ -165,20 +166,36 @@ class ModifierPickerMenu extends React.PureComponent {
|
||||||
|
|
||||||
setRef = c => {
|
setRef = c => {
|
||||||
this.node = c;
|
this.node = c;
|
||||||
|
if (this.node) {
|
||||||
|
this.node.querySelector('li:first-child button').focus(); // focus the first element when opened
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { active } = this.props;
|
const { active, modifier } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='emoji-picker-dropdown__modifiers__menu' style={{ display: active ? 'block' : 'none' }} ref={this.setRef}>
|
<ul
|
||||||
<button onClick={this.handleClick} data-index={1}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={1} backgroundImageFn={backgroundImageFn} /></button>
|
className='emoji-picker-dropdown__modifiers__menu'
|
||||||
<button onClick={this.handleClick} data-index={2}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={2} backgroundImageFn={backgroundImageFn} /></button>
|
style={{ display: active ? 'block' : 'none' }}
|
||||||
<button onClick={this.handleClick} data-index={3}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={3} backgroundImageFn={backgroundImageFn} /></button>
|
role='menuitem'
|
||||||
<button onClick={this.handleClick} data-index={4}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={4} backgroundImageFn={backgroundImageFn} /></button>
|
ref={this.setRef}
|
||||||
<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>
|
{[1, 2, 3, 4, 5, 6].map(i => (
|
||||||
</div>
|
<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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,10 +227,22 @@ class ModifierPicker extends React.PureComponent {
|
||||||
render () {
|
render () {
|
||||||
const { active, modifier } = this.props;
|
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 (
|
return (
|
||||||
<div className='emoji-picker-dropdown__modifiers'>
|
<div className='emoji-picker-dropdown__modifiers'>
|
||||||
|
<div ref={setRef}>
|
||||||
<Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={modifier} onClick={this.handleClick} backgroundImageFn={backgroundImageFn} />
|
<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>
|
||||||
|
<ModifierPickerMenu active={active} modifier={modifier} onSelect={this.handleSelect} onClose={this.props.onClose} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,11 +44,11 @@
|
||||||
box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2);
|
box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
button {
|
li {
|
||||||
display: block;
|
display: block;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
border: 0;
|
border: 0;
|
||||||
padding: 4px 8px;
|
padding: 3px 8px;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
|
|
||||||
&:hover,
|
&:hover,
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
@import '~emoji-mart/css/emoji-mart.css';
|
||||||
|
|
||||||
.emoji-mart {
|
.emoji-mart {
|
||||||
&,
|
&,
|
||||||
* {
|
* {
|
||||||
|
@ -51,6 +53,14 @@
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: darken($lighter-text-color, 4%);
|
color: darken($lighter-text-color, 4%);
|
||||||
|
|
||||||
|
svg {
|
||||||
|
fill: darken($lighter-text-color, 4%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
svg {
|
||||||
|
fill: $lighter-text-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,11 +69,19 @@
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: darken($highlight-text-color, 4%);
|
color: darken($highlight-text-color, 4%);
|
||||||
|
|
||||||
|
svg {
|
||||||
|
fill: darken($highlight-text-color, 4%);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.emoji-mart-anchor-bar {
|
.emoji-mart-anchor-bar {
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
svg {
|
||||||
|
fill: $highlight-text-color;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.emoji-mart-anchor-bar {
|
.emoji-mart-anchor-bar {
|
||||||
|
@ -83,7 +101,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
fill: currentColor;
|
|
||||||
max-height: 18px;
|
max-height: 18px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,15 +120,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.emoji-mart-search {
|
.emoji-mart-search {
|
||||||
padding: 10px;
|
margin: 10px 40px 10px 5px;
|
||||||
padding-right: 45px;
|
|
||||||
background: $simple-background-color;
|
background: $simple-background-color;
|
||||||
|
|
||||||
input {
|
input {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
padding: 7px 9px;
|
padding: 7px 9px;
|
||||||
font-family: inherit;
|
font-family: $font-sans-serif;
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: rgba($ui-secondary-color, 0.3);
|
background: rgba($ui-secondary-color, 0.3);
|
||||||
|
@ -166,6 +182,7 @@
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
padding: 5px 6px;
|
padding: 5px 6px;
|
||||||
background: $simple-background-color;
|
background: $simple-background-color;
|
||||||
|
font-family: $font-sans-serif;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import Picker from 'emoji-mart/dist-es/components/picker/picker';
|
import Picker from 'emoji-mart/dist-modern/components/picker/picker';
|
||||||
import Emoji from 'emoji-mart/dist-es/components/emoji/emoji';
|
import Emoji from 'emoji-mart/dist-modern/components/emoji/emoji';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Picker,
|
Picker,
|
||||||
|
|
Loading…
Reference in New Issue