Reflect "requested" relationship in API and UI Reflect inability of private posts to be reblogged in the UI Disable Webfinger for locked accounts
61 lines
1.4 KiB
JavaScript
61 lines
1.4 KiB
JavaScript
import PureRenderMixin from 'react-addons-pure-render-mixin';
|
|
|
|
const IconButton = React.createClass({
|
|
|
|
propTypes: {
|
|
title: React.PropTypes.string.isRequired,
|
|
icon: React.PropTypes.string.isRequired,
|
|
onClick: React.PropTypes.func,
|
|
size: React.PropTypes.number,
|
|
active: React.PropTypes.bool,
|
|
style: React.PropTypes.object,
|
|
activeStyle: React.PropTypes.object,
|
|
disabled: React.PropTypes.bool
|
|
},
|
|
|
|
getDefaultProps () {
|
|
return {
|
|
size: 18,
|
|
active: false,
|
|
disabled: false
|
|
};
|
|
},
|
|
|
|
mixins: [PureRenderMixin],
|
|
|
|
handleClick (e) {
|
|
e.preventDefault();
|
|
|
|
if (!this.props.disabled) {
|
|
this.props.onClick();
|
|
}
|
|
},
|
|
|
|
render () {
|
|
let style = {
|
|
display: 'inline-block',
|
|
border: 'none',
|
|
padding: '0',
|
|
background: 'transparent',
|
|
fontSize: `${this.props.size}px`,
|
|
width: `${this.props.size * 1.28571429}px`,
|
|
height: `${this.props.size}px`,
|
|
lineHeight: `${this.props.size}px`,
|
|
...this.props.style
|
|
};
|
|
|
|
if (this.props.active) {
|
|
style = { ...style, ...this.props.activeStyle };
|
|
}
|
|
|
|
return (
|
|
<button aria-label={this.props.title} title={this.props.title} className={`icon-button ${this.props.active ? 'active' : ''} ${this.props.disabled ? 'disabled' : ''}`} onClick={this.handleClick} style={style}>
|
|
<i className={`fa fa-fw fa-${this.props.icon}`} aria-hidden='true' />
|
|
</button>
|
|
);
|
|
}
|
|
|
|
});
|
|
|
|
export default IconButton;
|